OpenCV计算连通区域数目与最大连通区域并标示出
来源:互联网 发布:virtualbox mac 10.13 编辑:程序博客网 时间:2024/06/13 11:20
- #include <stdio.h>
- #include <cv.h>
- #include <highgui.h>
-
- #pragma comment(lib, "cv.lib")
- #pragma comment(lib, "cxcore.lib")
- #pragma comment(lib, "highgui.lib")
-
- int main( int argc, char** argv )
- {
- IplImage* src = cvLoadImage(".\\wind.png", CV_LOAD_IMAGE_GRAYSCALE);
- IplImage* dst = cvCreateImage(cvGetSize(src), 8, 3);
- CvMemStorage* storage = cvCreateMemStorage(0);
- CvSeq* contour = 0;
- cvThreshold(src, src,120, 255, CV_THRESH_BINARY);
- cvNamedWindow("Source", 1);
- cvShowImage("Source", src);
-
- int contour_num = cvFindContours(src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
- cvZero(dst);
- CvSeq *_contour = contour;
- double maxarea = 0;
- double minarea = 100;
- int m = 0;
- for( ; contour != 0; contour = contour->h_next )
- {
-
- double tmparea = fabs(cvContourArea(contour));
- if(tmparea < minarea)
- {
- cvSeqRemove(contour, 0);
- continue;
- }
- CvRect aRect = cvBoundingRect( contour, 0 );
- if ((aRect.width/aRect.height)<1)
- {
- cvSeqRemove(contour, 0);
- continue;
- }
- if(tmparea > maxarea)
- {
- maxarea = tmparea;
- }
- m++;
-
- CvScalar color = CV_RGB( 0, 255, 255 );
-
-
-
-
- cvDrawContours(dst, contour, color, color, -1, 1, 8);
- }
- contour = _contour;
- int count = 0;
- for(; contour != 0; contour = contour->h_next)
- {
- count++;
- double tmparea = fabs(cvContourArea(contour));
- if (tmparea == maxarea)
- {
- CvScalar color = CV_RGB( 255, 0, 0);
- cvDrawContours(dst, contour, color, color, -1, 1, 8);
- }
- }
- printf("The total number of contours is:%d", count);
- cvNamedWindow("Components", 1);
- cvShowImage("Components", dst);
- cvWaitKey(0);
- cvDestroyWindow("Source");
- cvReleaseImage(&src);
- cvDestroyWindow("Components");
- cvReleaseImage(&dst);
-
- return 0;
- }
0 0