是否可以从轮廓中删除小线段?
例如,在此图像中,最大轮廓是边界框,但我们也有一条线段连接到该框。
由于轮廓是一组点,我想我们可以做一些事情来去除不属于盒子的轮廓线。例如,通过检测和去除细线或细子轮廓或其他方式。但是我不知道该怎么办。
请记住,我要在找到轮廓后而不是在此之前将其删除。您知道我如何将其删除吗?或有什么主意吗?
//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);