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]);
         }
     }

Если "петли" или посторонние контурные области являются частью более крупного интересующего контура, взгляните на ок. Вполне возможно, что грубое приближение вашего исходного контура может опустить посторонние элементы.

Другие вопросы по тегам