关于二值化之后圈出白色区域的算法

 

相关的算法以及理论:图像处理、计算机视觉、机器学习等

版主: bebekifis, chai2010, lswang

关于二值化之后圈出白色区域的算法

帖子niuniu236 » 2010-03-19 23:39

如图, 请问如果我想用圆圈圈出这些白色大于50*50的区域,在算法上怎么实现?(PS*之前发错版块了 :shock:

想出了几个方法,但是由于边缘的不规则,那几个方法都不太适合,由于着急交作业所以请教哪位大侠给点提示,谢谢各位好心人! :roll:

图片


做了个CONTOUR, 然后把较小面积的轮廓滤掉只留大的。但是怎么能用画图工具把剩下的圈出来呢?
niuniu236
OpenCV小学生
 
帖子: 16
注册: 2009-11-29 12:10

Re: 关于二值化之后圈出白色区域的算法

帖子carson2005 » 2010-03-22 9:29

先findContour,然后draw,
my blog: http://blog.csdn.net/carson2005 QQ:1079185264
carson2005
OpenCV博士
 
帖子: 516
注册: 2008-10-01 19:22

Re: 关于二值化之后圈出白色区域的算法

帖子tangtang » 2010-03-22 20:43

可以参考下面的代码。


CvSeq* contour=NULL;
cvClearMemStorage( storage );
cvFindContours( mask, storage, &contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );

cvZero(mask);
CvScalar color = CV_RGB( 255,255,255 ); // Color for contour drawing

double contArea;
double imgArea = mask->width * mask->height;

// contour now contains a CvSequence of all of the contours
for( ; contour != 0; contour = contour->h_next )
{
contArea = fabs(cvContourArea( contour, CV_WHOLE_SEQ ));
if (contArea >= 40) {
cvDrawContours( mask, contour, color, color, 0, -1, 8 );

cvSmooth(mask, mask);

CvRect rect = cvBoundingRect( contour, 0 );
cvRectangle( mask, cvPoint(rect.x, rect.y + rect.height), cvPoint(rect.x + rect.width, rect.y), CV_RGB(200, 0, 200), 1, 8, 0 );
cvRectangle( mask, cvPoint(rect.x, rect.y + rect.height), cvPoint(rect.x + rect.width, rect.y), CV_RGB(200, 0, 200), 1, 8, 0 );
}
}

猜你喜欢

转载自blog.csdn.net/hilter/article/details/7451869
今日推荐