我是靠谱客的博主 灵巧钢笔,最近开发中收集的这篇文章主要介绍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引起的中断错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复