cvGetSize给出了错误的参数错误

时间:2013-06-07 18:02:38

标签: iphone ios opencv image-processing

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

错误:

  

OpenCV错误:cvGetSize中的错误参数(数组应为CvMat或IplImage),文件/Users/user/slave/builds/ios_framework/src/opencv/modules/core/src/array.cpp,第1238行   libc ++ 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建议我放置它们但功能仍无效。

1 个答案:

答案 0 :(得分:1)

您得到的错误是因为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变量和相关的手动内存管理。