C++ 将cvMinMaxLoc与IplImage一起使用时出错
在Linux中尝试编译基于OpenCV-0.9.5的旧代码时。它成功构建,但在运行时出现cv错误: “OpenCV错误:在未知函数、文件……。\ocv\OpenCV\src\cxcore\cxmatrix.cpp中断言失败(CV_IS_IMAGE(arr)&&(coi=cvGetImageCOI((const-IplImage*)arr)-1)>=0)” 我不擅长OpenCV,也不理解这段代码的真正作用。我只想在以下位置编译和运行项目: 该项目有很多代码,我无法在这里全部编写,但我在另一个项目中编写并测试了容易出错的代码,如下所示:C++ 将cvMinMaxLoc与IplImage一起使用时出错,c++,opencv,C++,Opencv,在Linux中尝试编译基于OpenCV-0.9.5的旧代码时。它成功构建,但在运行时出现cv错误: “OpenCV错误:在未知函数、文件……。\ocv\OpenCV\src\cxcore\cxmatrix.cpp中断言失败(CV_IS_IMAGE(arr)&&(coi=cvGetImageCOI((const-IplImage*)arr)-1)>=0)” 我不擅长OpenCV,也不理解这段代码的真正作用。我只想在以下位置编译和运行项目: 该项目有很多代码,我无法在这里全部编写,但我在另一个项目中
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时仍会产生相同的错误。有什么问题?我怎样才能解决这个问题
注释:我使用OpenCV2.4.1和Visual Studio 2013用C++来实现.< /P> < P> @ Miki,我迁移到OpenCV 3.1,但是问题是转换这些行:
CvSeq* contour=NULL;
CvMemStorage* storage = cvCreateMemStorage(0);
cvFindContours(threshold_image, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
OpenCV 3.1包含具有不同类型参数的FindOnTours方法:
此外,代码继续使用轮廓变量作为:
等高线->总计
您知道CvSeq和CvMemStorage的正确等效性是什么吗 我用以下代码替换代码:
vector<Point> contour;
vector<vector<Point>> storage;
findContours(threshold_image, storage, contour, CV_RETR_LIST, CV_CHAIN_APPROX_NONE, Point(0, 0));
矢量轮廓;
矢量存储;
findContours(阈值图像、存储、轮廓、CV_RETR_列表、CV_链约无、点(0,0));
所有代码都转换为OpenCV 3.1,项目成功构建,但问题仍然存在,正如我在问题中声明的那样。在这里编写所有代码是不合理的,因此我可以将整个Visual Studio 2013项目发送给想要调试的人
谢谢最后我发现问题在于位置的输入参数:
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);
输出最大值为255,最小值为0。为什么这些最小位置和最大位置会导致此问题 不要使用C过时的api!谢谢我尝试使用OpenCV 2.4.1将所有代码转换成C++,但不能成功。最新的是3.1