我正在尝试减少图像的眩光和光反射,然后再继续进行一些图像处理。我在网上发现了一段代码,据说可以选择范围内的像素,但是当我插入算法时,它会给我一个错误。我已经验证我的图片数据不是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建议我放置它们但功能仍无效。
答案 0 :(得分:1)
您得到的错误是因为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
变量和相关的手动内存管理。