vs2012 2013 2015用opencv findCountours这个函数的bug

这两天真是恼火  在vs2010上写了个寻找最大轮廓的程序,可以使用,移到2015上不行  会遇到触发一个断点什么的 ,好,那就到2012上写,还是不行,没办法,去网上

找,发现很多人都有这种情况;

double area = cv::contourArea(contours[i]);

会莫名其妙的运行几次这个语句就崩溃了,打开监视一看,哇塞,findContours(dst, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);  countours中的数据大的不可想象,又继续找,终于在网上找到了原因:环境变量path中有多个opencv的变量:

D:\open\build\x86\vc10\lib;

D:\open\build\x86\vc11\lib;

D:\open\build\x86\vc12\lib;

把多余的删掉,只留下D:\open\build\x86\vc12\lib;再运行,提示缺少.dll文件,网上一查,下载.dll文件解决,再运行,完美运行。

总算解决了这个bug,不过2010和2012都用不了opencv,只能用2015学习opencv了。

顺便贴上我的寻找最大联通区域的代码。

就这样了!!!!



		threshold(dst,dst, 254, 255.0, CV_THRESH_BINARY);
		
		/*Mat dst = InfraredImage;*/
	/*	imshow("InfraredImage", InfraredImage);*/


		
		findContours(dst, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
		
		double maxArea = 0;
		vector maxContour;
		 
		


		for (size_t i = 0; i < contours.size(); i++)
		{
			double area = cv::contourArea(contours[i]);
			if (area > maxArea)
			{
				maxArea = area;
				maxContour = contours[i];
			}
		} 
		cv::Rect maxRect;
		if (size(maxContour) != 0)
			 maxRect = cv::boundingRect(maxContour);
		else
			 maxRect=Rect(0, 0, 0, 0);
			// 显示连通域  
		cv::Mat result1, result2;


		InfraredImage.copyTo(result1);
		InfraredImage.copyTo(result2);
		for (size_t i = 0; i < contours.size(); i++)
		{
			cv::Rect r = cv::boundingRect(contours[i]);
			cv::rectangle(result1, r, cv::Scalar(255));
		}
		
		cv::imshow("all regions", result1);
		/*cv::rectangle(result2, maxRect, cv::Scalar(255));*/
		cv::rectangle(InfraredImage, maxRect, cv::Scalar(255));
		/*cv::imshow("largest region", result2);*/
		imshow("InfraredImage", InfraredImage);


你可能感兴趣的:(vs,opencv,bug)