我正在尝试减少图像的眩光和光反射,然后继续进行更多图像处理。我在网上找到了一段代码,据说可以用于选择范围内的像素,但是当我插入到我的算法中时,它给了我一个错误。我已经验证我的图像数据不是 NULL
,因此这不会导致问题。为什么我会遇到断言失败?
错误:
OpenCV Error: Bad argument (Array should be CvMat or IplImage) in cvGetSize, file /Users/user/slave/builds/ios_framework/src/opencv/modules/core/src/array.cpp, line 1238 libc++abi.dylib: terminate called throwing an exception.
代码:
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 的一部分,而 CvMat
和 IplImage
属于 C API,已弃用。最好不要将两者混为一谈。
您似乎想使用 cv::inRange()
函数,也许是这样的:
cv::inRange(eye1, cv::Scalar(0,0,90,0), cv::Scalar(0,0,100,0), eye2);
然后您就可以省去 IplImage
变量和相关的手动内存管理。
关于iphone - cvGetSize 给出错误参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990279/