0

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

错误:

OpenCV 错误:cvGetSize 中的错误参数(数组应为 CvMat 或 IplImage),文件 /Users/user/slave/builds/ios_framework/src/opencv/modules/core/src/array.cpp,第 1238 行 libc++abi.dylib : 终止调用抛出异常。

代码:

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);

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

4

1 回答 1

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变量和相关的手动内存管理。

于 2013-06-07T19:19:42.510 回答