OpenCV - Как удалить небольшие отрезки из контура?
Есть ли способ удалить небольшие отрезки из контура?
Например, на этом изображении самый большой контур обозначен зеленым цветом, а его приближение определено синим цветом:
Поскольку контур - это набор точек, я думаю, мы можем что-то сделать, чтобы удалить сегменты контуров, которые находятся в красных кружках. Например, путем обнаружения и удаления маленьких линий или маленьких подконтур или другим способом. Но я не знаю, как я могу это сделать.
Пожалуйста, помните, что я хочу удалить их после нахождения контура, а не до этого. Ты знаешь, как я могу их удалить? Или есть идеи?
1 ответ
Я обнаружил, что contourArea хорош для удаления небольших изолированных контуров. Этот фрагмент иллюстрирует, как вы можете продолжить:
findContours(edges, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
...
// Prune contours
vector<vector<Point> > prunedContours;
for (size_t i = 0; i< contours.size(); i++)
{
if (contourArea(contours[i]) > minArea)
{
prunedContours.push_back(contours[i]);
}
}
Если "петли" или посторонние контурные области являются частью более крупного интересующего контура, взгляните на ок. Вполне возможно, что грубое приближение вашего исходного контура может опустить посторонние элементы.