使用findContours openCV时出现堆错误

时间:2016-12-14 11:22:46

标签: c++ opencv heap-memory

我阅读了很多帖子,但我仍然无法找到解决问题的方法。链接库是正确的,代码可以很好地工作很多其他openCV函数,但不适用于findContours。 我要发布我的代码:

int check_broken(Mat src, Mat check){
vector<Mat> contours;
vector<Vec4i> hierarchy;
Mat check_gray,check_g;
cvtColor(src,check_gray,CV_BGR2GRAY);
threshold(check_gray,check_g,100,255,THRESH_BINARY);
namedWindow("ventana",CV_WINDOW_AUTOSIZE);
imshow("ventana",check_gray);
waitKey(0);

Mat dst(check.rows,check.cols,CV_8UC1,Scalar::all(0));
int count = 0;

findContours( check_g, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );


for (int i = 0; i < contours.size() ; i = hierarchy[i][0]){
    Rect r = boundingRect(contours[i]);
    if(hierarchy[i][2]<0){
        rectangle(check,Point(r.x,r.y), Point(r.x+r.width,r.y+r.height),Scalar(0,0,255),3,8,0);
        count++;
    }
}
namedWindow("ventana",CV_WINDOW_AUTOSIZE);
imshow("ventana",dst);
waitKey(0);
destroyWindow("ventana");
return 0;
}

我正在发布模式下进行编译,并且所有库都是相同的版本2413,我正在使用VS10。我想知道如何处理这个问题。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

  

我正在使用VS10

     

这是路径:C:\ opencv \ build \ x86 \ vc11 \ bin

您正在链接到错误的库。

您使用的是使用vc11编译的OpenCV(即Visual Studio 2012),但您使用的是Visual Studio 2010.因此它不会起作用。你可以:

  1. 使用Visual Studio 2012或
  2. 使用使用vc10编译的OpenCV(如果找不到预构建的二进制文件,则需要重新编译OpenCV)