2016-12-14 102 views
0

我阅读了很多帖子,但仍找不到解决方案。链接的库是正确的,并且代码可以很好地适用于许多其他openCV函数,但不适用于findContours。 我要发布我的代码:使用findContours时发生堆错误openCV

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工作。我想知道如何处理这个问题。感谢帮助!

+2

你的链接库是*

  • 使用的OpenCV *不正确。一定不要在发布模式下使用调试库,反之亦然。并使用与您的项目相同的体系结构(x86 vs x64)。而且可以肯定的是,OpenCV的库与VC10 – Miki

  • +0

    编译opencv_calib3d2413.lib opencv_contrib2413.lib opencv_core2413.lib opencv_features2d2413.lib opencv_flann2413.lib opencv_gpu2413.lib opencv_highgui2413.lib opencv_imgproc2413.lib opencv_legacy2413.lib opencv_ml2413。 LIB opencv_nonfree2413.lib opencv_objdetect2413.lib opencv_photo2413.lib opencv_stitching2413.lib opencv_superres2413.lib opencv_ts2413.lib opencv_video2413.lib opencv_videostab2413.lib 这些是为释放模式链接的库,我确定它们是正确的 –

    +1

    这些是发布库。一定要在发布中运行你的代码。还请显示这些库的路径 – Miki

    回答

    2

    我与VS10

    在这里工作的路径:C:\ OpenCV的\建设\ 86 \ VC11 \ BIN

    你链接到了错误的库。

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

    1. 使用Visual Studio 2012,或vc10编译(如果你没有找到预编译的二进制,你需要重新编译的OpenCV)