0
cv::Mat thr;

std::vector<std::vector<cv::Point> > contours;
std::vector<std::vector<cv::Vec4i> > hierarchy;

int largest_area          = 0;
int largest_contour_index = 0;

cv::findContours( thr, contours, hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); // Find the contours in the image

for( int i = 0; i < contours.size(); i++ )                                           // iterate through each contour.
{
   double a = contourArea( contours[i], false );                                        // Find the area of contour
   if(a > largest_area)
   {
      largest_area          = a;
      largest_contour_index = i;                                                    // Store the index of largest contour
   }

}

最大等高線のインデックスを見つけた後、どうすればよいですか? 内側の領域で他のすべての輪郭を削除するにはどうすればよいですか? イメージはバイナリ (cv::Mat thr) です。黒い背景に白い部分だけ。ありがとう。

4

2 に答える 2

0

輪郭を見つけた後、最大の輪郭のインデックスを見つけ、その輪郭をマットに描画します。

int indexOfBiggestContour = -1;
int sizeOfBiggestContour = 0;
for (int i = 0; i < contours.size(); i++)
{
    if (contours[i].size() > sizeOfBiggestContour)
    {
        sizeOfBiggestContour = contours[i].size();
        indexOfBiggestContour = i;
    }
}
cv::Mat newImage;
drawContours(newImage, contours, indexOfBiggestContour, Scalar(255), CV_FILLED, 8, hierarchy);
于 2016-01-21T12:53:48.923 に答える