我想从以下功能中获得最大轮廓。我正在使用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;
}
答案 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);