1. 程式人生 > >關於二值化之後圈出白色區域的演算法

關於二值化之後圈出白色區域的演算法

 

相關的演算法以及理論:影象處理、計算機視覺、機器學習等

版主: bebekifis, chai2010, lswang

發表回覆 4 篇帖子 • 分頁: 1 / 1

關於二值化之後圈出白色區域的演算法

帖子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 );
}
}