问题很有趣。
如果想把图像另存一下(通过pImage2),必须在创建pImage2之前做点事,比如ShowMessage,提示任何都可以,然后就可以保存。如果不另存(不执行cvSaveImage),那么,ShowMessage就不用使用。也不出错。procedure TForm1.btnTestClick(Sender: TObject);
var
pImage1,pImage2:PIplImage;
w,h,d,c:Integer;
begin
pImage1:=cvLoadImage(PAnsiChar(PathA));
w:= pImage1.Width;
h:= pImage1.Height;
d:= pImage1.Depth;
c:= pImage1.NChannels;
//最奇怪的是这里。如果注销掉ShowMessage,这句,就提示错误,无法保存文件。
ShowMessage(Format('%d %d %d %d',[pImage1.Width,pImage1.Height,pImage1.Depth,pImage1.NChannels]));
//这么创建正常
pImage2:=cvCreateImage(cvSize_(pImage1.Width,pImage1.Height),pImage1.Depth,pImage1.NChannels);
//这么创建就提示错误
//pImage2:=cvCreateImage(cvGetSize(pImage1),pImage1.Depth,pImage1.NChannels);
cvSmooth(pImage1,pImage2,cv_median);
cvSaveImage(PChar(PachC),pImage2);
end;
如果想把图像另存一下(通过pImage2),必须在创建pImage2之前做点事,比如ShowMessage,提示任何都可以,然后就可以保存。如果不另存(不执行cvSaveImage),那么,ShowMessage就不用使用。也不出错。procedure TForm1.btnTestClick(Sender: TObject);
var
pImage1,pImage2:PIplImage;
w,h,d,c:Integer;
begin
pImage1:=cvLoadImage(PAnsiChar(PathA));
w:= pImage1.Width;
h:= pImage1.Height;
d:= pImage1.Depth;
c:= pImage1.NChannels;
//最奇怪的是这里。如果注销掉ShowMessage,这句,就提示错误,无法保存文件。
ShowMessage(Format('%d %d %d %d',[pImage1.Width,pImage1.Height,pImage1.Depth,pImage1.NChannels]));
//这么创建正常
pImage2:=cvCreateImage(cvSize_(pImage1.Width,pImage1.Height),pImage1.Depth,pImage1.NChannels);
//这么创建就提示错误
//pImage2:=cvCreateImage(cvGetSize(pImage1),pImage1.Depth,pImage1.NChannels);
cvSmooth(pImage1,pImage2,cv_median);
cvSaveImage(PChar(PachC),pImage2);
end;
//这么创建就提示错误
//pImage2:=cvCreateImage(cvGetSize(pImage1),pImage1.Depth,pImage1.NChannels);