如何在opencv中从轮廓形状中删除多余的线

时间:2019-08-07 12:39:57

标签: image opencv image-processing computer-vision

是否可以从轮廓中删除小线段?

例如,在此图像中,最大轮廓是边界框,但我们也有一条线段连接到该框。

Contour with an extra line segment

由于轮廓是一组点,我想我们可以做一些事情来去除不属于盒子的轮廓线。例如,通过检测和去除细线或细子轮廓或其他方式。但是我不知道该怎么办。

请记住,我要在找到轮廓后而不是在此之前将其删除。您知道我如何将其删除吗?或有什么主意吗?

//After edge detection with canny.
//canny variable has the edge mat       
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours( canny, contours, hierarchy, RETR_EXTERNAL,CHAIN_APPROX_SIMPLE, cv::Point(0, 0) );
Mat draw = Mat::zeros(canny.size(), CV_8UC3);

for (int i = 0; i< contours.size(); i++){
    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
    }
}
drawContours(draw, contours, largest_contour_index, Scalar(255, 255, 255), 0, 8, hierarchy);
imshow("Contours", draw);

0 个答案:

没有答案