我是靠谱客的博主 灵巧钢笔,最近开发中收集的这篇文章主要介绍OpenCV笔记第二天:关于MFC中OpenCV使用cvFindContours引起的中断错误MFC中OpenCV图像处理使用cvFindContours引起的中断错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MFC中OpenCV图像处理使用cvFindContours引起的中断错误

最近把之前用OpenCV做的图像处理加入到了MFC中,但是发现运行出现了中断错误。检查了N边也没发现错误。一句一句调试之后发现问题出在

cvFindContours()这里,找了N多办法,最终解决了。不是程序的问题,下面记录下解决方法。

 

运行结果:

 

 

解决方法:

【项目】->【属性】->【配置属性】->【C/C++】->【代码生成】->【运行时库】,设置为【多线程DLL(/MD)】;

 

【项目】->【属性】->【配置属性】->【常规】->【MFC的使用】,设置为【在共享DLL中使用MFC 】。

 

 

这时,即可解决问题,有时可能会出现,如下warning :

warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;使用 /NODEFAULTLIB:library

解决方法:

【项目】->【属性】->【配置属性】->【连接器】->【输入】->【忽略指定库】,输入:msvcrt.lib

 

这下就完美解决了。

 

我的代码如下:

 

void CReadDlg::AreCout()
{
	/*  findContours后会对输入的2值图像改变,所以如果不想改变该2值图像,
		需创建新mat来存放,findContours后的轮廓信息contours可能过于复杂不平滑,
		可以用approxPolyDP函数对该多边形曲线做适当近似			  */
	// 【7】找到轮廓	 获取每个轮廓的每个像素											 
	findContours( out, g_vContours, g_vHierarchy,
				CV_RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0) );	  
	N_led = g_vContours.size() ;
	printf(" > 区域个数:%d n", N_led );  

	// 【8】计算矩
	vector<Moments> mu(g_vContours.size() );
	for(unsigned int i = 0; i < g_vContours.size(); i++ )
		mu[i] = moments( g_vContours[i], false ); 

	// 【9】计算中心矩
	vector<Point2f> mc( g_vContours.size() );
	for( unsigned int i = 0; i < g_vContours.size(); i++ ) 
	{
		mc[i] = Point2f( static_cast<float>(mu[i].m10/mu[i].m00), 
			static_cast<float>(mu[i].m01/mu[i].m00 )); 

		// 【10】二维坐标转换  
		printf("t(X%d , Y%d)= (%7.3f , %7.3f)t    P%d = %4.3fn",i+1,i+1,
			coord_X(mc[i].x),coord_Y(mc[i].y),i+1,P_call(mc[i].x,mc[i].y) );	
		P[i] = P_call( mc[i].x , mc[i].y ) ;

	}
	// 【11】绘制轮廓 
	drawing = Mat::zeros( out.size(), CV_8UC3 );
	for( unsigned int i = 0; i< g_vContours.size(); i++ )
	{
		Scalar color = Scalar(rand()&255 , rand()&255 ,rand()&255 );//随机生成颜色值
		drawContours( drawing, g_vContours, i , color, 2, 8, g_vHierarchy, 0, Point() );//绘制外层轮廓
		//颜色,线宽,线型,轮廓结构信息
		circle( drawing, mc[i] , 3 , color, -1, 8, 0 );;//绘制圆
	}
	// 【12】通过OpenCV计算轮廓面积并且和OpenCV函数比较
	printf("n > 计算出轮廓的面积S:tt 计算出不精确立体角Ω: n");
	for(unsigned  int i = 0; i< g_vContours.size(); i++ )	
	{
		float S = (float)contourArea(g_vContours[i]) ;
		float w = w_call(coord_X(mc[i].x) , coord_Y(mc[i].y) , S );
		wl[i] = w_call(coord_X(mc[i].x) , coord_Y(mc[i].y) , S );
		printf(" tS_%d = %.2ftt    Ω_%d = %.9f tn" ,i+1 ,
			contourArea(g_vContours[i]),i+1 , w );

	}

}

 

运行结果:

 

最后

以上就是灵巧钢笔为你收集整理的OpenCV笔记第二天:关于MFC中OpenCV使用cvFindContours引起的中断错误MFC中OpenCV图像处理使用cvFindContours引起的中断错误的全部内容,希望文章能够帮你解决OpenCV笔记第二天:关于MFC中OpenCV使用cvFindContours引起的中断错误MFC中OpenCV图像处理使用cvFindContours引起的中断错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部