将cvMinMaxLoc与IplImage一起使用时出错

时间:2016-03-29 22:23:10

标签: c++ opencv

尝试在Linux中编译基于OpenCV-0.9.5的旧代码。它成功构建,但运行时出现了cv错误:

" OpenCV错误:断言失败(CV_IS_IMAGE(arr)&&(coi = cvGetImageCOI((const IplImage *)arr)-1)> = 0)未知功能,文件.... .... \ OCV \的OpenCV \ SRC \ CXCORE \ cxmatrix.cpp"

我不擅长OpenCV,也不了解这段代码到底做了什么。我只想编译并运行项目:https://github.com/thirtysixthspan/cvEyeTracker

该项目有很多代码,我不能在这里编写所有代码,但是我在这样的另一个项目中编写并测试了容易出错的代码:

IplImage *eye_image; 

char *in_file = "E:\\eye.png";

eye_image = cvLoadImage(in_file, 1);

double min_value, max_value;

CvPoint min_loc, max_loc;

cvMinMaxLoc(eye_image, &min_value, &max_value, &min_loc, &max_loc);

调用cvMinMaxLoc时仍会产生相同的错误。问题是什么?我该如何解决这个问题?

注意:我正在使用OpenCV 2.4.1和Visual Studio 2013 with C ++。

2 个答案:

答案 0 :(得分:0)

我用以下代码替换了代码:

vector<Point> contour;

vector<vector<Point>> storage;

findContours(threshold_image, storage, contour, CV_RETR_LIST, CV_CHAIN_APPROX_NONE, Point(0, 0));

所有代码都转换为OpenCV 3.1并且项目已成功构建,但问题仍然存在,正如我在问题中声明的那样。在这里编写所有代码是不合理的,因此我可以将整个Visual Studio 2013项目发送给想要调试的人。

谢谢

答案 1 :(得分:0)

最后我发现问题是它是位置的输入参数:

Mat eye_image; 

eye_image = imread("E:\\eye.png");

double min_value, max_value;

//CvPoint min_loc, max_loc;

minMaxLoc(eye_image, &min_value, &max_value);//, &min_loc, &max_loc);

输出为Max = 255,Min = 0.为什么这些min_loc和max_loc会导致此问题?