调整图像大小并更改其深度

Dan*_*ele 5 opencv

我需要调整IplImage的大小并将其转换为不同深度的CvMat,这是我到目前为止编写的代码:

void cvResize2(IplImage *imgSrc, IplImage *imgDst)
{
    IplImage *imgTemp;
    imgTemp = cvCreateImage( cvGetSize( imgSrc ), IPL_DEPTH_64F, 1 );

    cvScale( imgSrc, imgTemp, 1/255., 0.0 );
    cvResize( imgTemp, imgDst );
}
Run Code Online (Sandbox Code Playgroud)

源图像为灰度,目标图像为64F深.cvScale仅在相同大小的图像之间缩放,因此是临时图像.

调用cvResize时,程序会出现以下异常:

OpenCV Error: Assertion failed (func != 0) in resize, file /tmp/buildd/opencv-2.1.0/src/cv/cvimgwarp.cpp, line 1488
terminate called after throwing an instance of 'cv::Exception'
what():  /tmp/buildd/opencv-2.1.0/src/cv/cvimgwarp.cpp:1488: error: (-215) func != 0 in function resize
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么,我已经检查过图像是否符合强加的条件

  • src:512x384,8深度
  • tmp:512x384,64深度
  • dst:64x64,64深度

有线索吗?提前致谢

mpe*_*kov 6

您可能发现了一个错误.我也可以在我的最终重现它(Ubuntu 64位,OpenCV-2.1.0).如果您使用32位浮点精度,它可以工作,但崩溃与64位浮点数.我的建议是将您的OpenCV更新到最新版本,看看问题是否消失.如果没有,那么在调试模式下构建库并逐步执行抛出断言的函数.通过查看罪魁祸首来源cvimgwarp.cpp,看起来它无法找到用于目标图像的插值方法.

  • @rwong非常观察!张贴作为答案!在我的例子中,图像`dtype`是`int64`(在Python中).我一使用`uint8`就行了 (4认同)
  • 这是因为OpenCV`resize`缺少对输入和输出深度(数值类型)和插值类型的某些组合的支持. (2认同)