圖像連通域的標定

[圖片] 圖像連通域的標定(OpenCv版)

[圖片] 圖像連通域的標定(OpenCv版)

[代碼] [C/C++]代碼

01 #include "cv.h"
02 #include "cxcore.h"
03 #include "highgui.h"
04   
05 int main( int argc, char** argv )
06 {
07     //聲明IplImage指針
08     IplImage* pImg = cvLoadImage("e:/black.jpg",0);
09     IplImage* pContourImg = NULL;
10     CvMemStorage * storage = cvCreateMemStorage(0);
11     CvSeq * contour = 0;
12     CvSeq *contmax = 0;
13     int mode = CV_RETR_EXTERNAL;
14     cvShowImage( "src", pImg );
15     //爲輪廓顯示圖像申請空間
16     //3通道圖像,以便用彩色顯示
17     pContourImg = cvCreateImage(cvGetSize(pImg),
18         IPL_DEPTH_8U,
19         3);
20     //copy source image and convert it to BGR image
21     cvCvtColor(pImg, pContourImg, CV_GRAY2BGR);
22     //查找contour
23     cvFindContours( pImg, storage, &contour, sizeof(CvContour),
24         mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
25     //將輪廓畫出   
26     cvDrawContours(pContourImg, contour,
27         CV_RGB(255,0,0), CV_RGB(255, 0, 0),
28         2, 2, 8, cvPoint(0,0));
29     int area,maxArea = 10;//設面積最大值大於10Pixel
30     for(;contour;contour = contour->h_next)
31     {
32         area = fabs(cvContourArea( contour, CV_WHOLE_SEQ )); //獲取當前輪廓面積
33         printf("area == %lf\n", area);
34         if(area > maxArea)
35         {
36             contmax = contour;
37             maxArea = area;
38         }
39     }
40     CvRect aRect = cvBoundingRect( contmax, 0 );
41     cvSetImageROI( pContourImg,aRect);
42     //顯示圖像
43     cvShowImage( "contour", pContourImg );
44     cvSaveImage("e:/contour.jpg",pContourImg);
45     cvWaitKey(0);
46  
47     //銷燬窗口
48     cvDestroyWindow( "src" );
49     cvDestroyWindow( "contour" );
50     //釋放圖像
51     cvReleaseImage( &pImg );
52     cvReleaseImage( &pContourImg );
53     cvReleaseMemStorage(&storage);
54  
55     return 0;
56 }
發佈了4 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章