cvGetSize给出错误的参数



我正在尝试减少图像的眩光和光反射,然后继续进行更多的图像处理。我在网上找到了一段代码,据说可以在一个范围内选择像素,但当我插入我的算法时,它给了我一个错误。我已经验证了我的图像数据不是NULL,所以这不是导致问题的原因。为什么我得到一个断言失败?

错误:

OpenCV错误:坏的参数(数组应该是CvMat或IplImage)在cvGetSize,文件/Users/user/slave/builds/ios_framework/src/OpenCV/modules/core/src/Array .cpp,行1238libc + + abi。Dylib: terminate抛出异常

代码:

cv::Mat eye1 = [self cvMatFromUIImage:eye];
cv::Mat eye2;
IplImage imgHSV = *cvCreateImage(cvGetSize(&eye1), 8, 3);    //Assertion fails here
IplImage imgThreshold = *cvCreateImage(cvGetSize(&imgHSV), 8, 1);
cvInRangeS(&imgHSV, cvScalar(0, 0, 90, 0), cvScalar(0, 0, 100, 0) , &imgThreshold);
cv::Mat eye3(&imgThreshold);

原始代码不包括*&符号,但Xcode建议我放置它们,但功能仍然不起作用

您得到的错误是因为eye1既不是CvMat*也不是IplImage*,这是cvGetSize()所期望的,而是cv::Mat。你需要明白这三种是不同的类型。cv::Mat是c++ API的一部分,而CvMatIplImage属于C API,已弃用。这两者最好不要混在一起。

看起来你想使用cv::inRange()函数,也许像这样:

cv::inRange(eye1, cv::Scalar(0,0,90,0), cv::Scalar(0,0,100,0), eye2);

然后您可以免除IplImage变量和相关的手动内存管理。

最新更新