OpenCv的连通域操作
生活随笔
收集整理的這篇文章主要介紹了
OpenCv的连通域操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于項目需要,要對圖像中的最大連通域進行標定,并且存儲。首先需要使用cvFindCountour對邊緣進行標定,其實它的原理就是連通域的邊緣提取;其次就是對連通域進行大小判斷找出最大的連通域;最后當然就是進行Rect并且ROI了。如果有需要可以進行存儲。直接上源碼吧。
?int main( int argc, char** argv ){?//聲明IplImage指針?IplImage* pImg = cvLoadImage("black.bmp",0);?IplImage* pContourImg = NULL;?CvMemStorage * storage = cvCreateMemStorage(0);?CvSeq * contour = 0;?CvSeq *contmax = 0;?int mode = CV_RETR_EXTERNAL;?cvShowImage( "src", pImg );?//為輪廓顯示圖像申請空間?//3通道圖像,以便用彩色顯示?pContourImg = cvCreateImage(cvGetSize(pImg),? IPL_DEPTH_8U,? 3);?//copy source image and convert it to BGR image?cvCvtColor(pImg, pContourImg, CV_GRAY2BGR);?//查找contour?cvFindContours( pImg, storage, &contour, sizeof(CvContour),? mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));?//將輪廓畫出?? ?cvDrawContours(pContourImg, contour,? CV_RGB(255,0,0), CV_RGB(255, 0, 0),? 2, 2, 8, cvPoint(0,0));?int area,maxArea = 10;//設面積最大值大于10Pixel?for(;contour;contour = contour->h_next)?{? area = fabs(cvContourArea( contour, CV_WHOLE_SEQ )); //獲取當前輪廓面積? printf("area == %lf\n", area);? if(area > maxArea)? {?? contmax = contour;?? maxArea = area;? }?}?CvRect aRect = cvBoundingRect( contmax, 0 );?cvSetImageROI( pContourImg,aRect);?//顯示圖像?cvShowImage( "contour", pContourImg );?cvSaveImage("contour.bmp",pContourImg);?cvWaitKey(0);?//銷毀窗口?cvDestroyWindow( "src" );?cvDestroyWindow( "contour" );?//釋放圖像?cvReleaseImage( &pImg );?cvReleaseImage( &pContourImg );?cvReleaseMemStorage(&storage);?return 0;}處理前的連通域
處理后的連通域
以下是結果:
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
總結
以上是生活随笔為你收集整理的OpenCv的连通域操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实用软件工具
- 下一篇: matlab更改安全密钥,Linux下设