问题很有趣。
如果想把图像另存一下(通过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;