如何从openCV函数中获取最大轮廓,以便将其存储在数组中

时间:2018-10-19 02:52:42

标签: opencv

我想从以下功能中获得最大轮廓。我正在使用openCV,但我不熟悉下面使用的语言。我只需要轮廓即可将其放入数组中以进行进一步处理。我想我需要在第一行和最后一行中添加一些代码。另外,轮廓是什么数据类型?这是代码:

+(UIImage *)ConvertImage:(UIImage *)image {
cv::Mat mat;
UIImageToMat(image, mat);

//. ......lots of image processing


std::vector<std::vector<cv::Point> > contours;
cv::Mat contourOutput = adaptive.clone();
cv::findContours( contourOutput, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE );
int largest_area=0;
int largest_contour_index=0;
// iterate through each contour.
for( int i = 0; i< contours.size(); i++ )
{
    //  Find the area of contour
    double a=contourArea( contours[i],false);
    if(a>largest_area){
        largest_area=a;                  //this is the output I want to store
        largest_contour_index=i;

    }
}
UIImage *binImg = MatToUIImage(contourImage);
return binImg;
}

1 个答案:

答案 0 :(得分:0)

所有轮廓都存储在向量std::vector<std::vector<cv::Point> > contours;中 并且最大的索引是largest_contour_index。 因此,创建一个vector<Vec4i> hierarchy;和空白的Mat biggest_contour;,然后使用它的索引在其上绘制轮廓,例如:drawContours(biggest_contour, contours, largest_contour_index, Scalar(255, 255, 255), CV_FILLED, 8, hierarchy);