【问题标题】:resize an image and changing its depth调整图像大小并更改其深度
【发布时间】:2011-11-15 04:11:19
【问题描述】:

我需要调整 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 );
}

源图像为灰度,目标图像为 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

我不知道为什么,我已经检查过图片是否符合规定的条件

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

有什么线索吗? 提前致谢

【问题讨论】:

    标签: opencv


    【解决方案1】:

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

    【讨论】:

    • 这是因为 OpenCV resize 缺少对输入和输出深度(数字类型)和插值类型的某些组合的支持。
    • @misha 你我的朋友是个天才!
    • @rwong 出色的观察!将其发布为答案!就我而言,图像dtypeint64(在Python 中)。我一使用uint8,它就起作用了
    猜你喜欢
    • 2021-10-19
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2014-05-07
    相关资源
    最近更新 更多