http://blog.csdn.net/shaoxiaohu1/article/details/40272875

版權聲明:本文為shaoxiaohu原創文章,歡迎轉載,請注明出處,謝謝。
上一篇博文中介紹了matlab查找最大連通區域的方法,OpenCV函數中也有類似的函數與之對應,findCoutours。下面代碼為使用示例:
- cv::Mat bwImg;
- vector<vector<cv::Point>> contours ;
- // 二值化圖像
- cv::threshold(srcImg, bwImg, 0.0, 255.0, CV_THRESH_BINARY | CV_THRESH_OTSU);
- cv::imshow("binary image", bwImg);
- cv::waitKey();
- // 查找輪廓,對應連通域
- cv::findContours(bwImg,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
- // 尋找最大連通域
- double maxArea = 0;
- vector<cv::Point> maxContour;
- for(size_t i = 0; i < contours.size(); i++)
- {
- double area = cv::contourArea(contours[i]);
- if (area > maxArea)
- {
- maxArea = area;
- maxContour = contours[i];
- }
- }
- // 將輪廓轉為矩形框
- cv::Rect maxRect = cv::boundingRect(maxContour);
- // 顯示連通域
- cv::Mat result1, result2;
- bwImg.copyTo(result1);
- bwImg.copyTo(result2);
- for (size_t i = 0; i < contours.size(); i++)
- {
- cv::Rect r = cv::boundingRect(contours[i]);
- cv::rectangle(result1, r, cv::Scalar(255));
- }
- cv::imshow("all regions", result1) ;
- cv::waitKey();
- cv::rectangle(result2, maxRect, cv::Scalar(255));
- cv::imshow("largest region", result2) ;
- cv::waitKey();