Opencv - получение гладкой части продолговатой формы после пороговой обработки

Я устанавливаю порог изображения и достигаю такого результата: изображение после определения порога.

Теперь я хотел бы добиться только контура самой большой продолговатой формы: продолговатая форма.

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

Если ваша «продолговатая форма» всегда значительно толще, чем ответвления - просто расширьте изображение, пока они не «отпадут», а затем найдите самый большой контур.

Headcrab 14.09.2018 04:33
0
1
67
1

Ответы 1

Я бы посоветовал вам инвертировать пороговое изображение, чтобы контуры были белыми, а фон - черным (cv2.threshold(cv2.THRESH_BINARY_INV)). Затем вы ищите контуры с помощью cv2.findContours(). Чтобы выбрать желаемый контур, вы можете сделать несколько фильтров, чтобы исключить другие контуры из контура, который вы надеетесь найти. Вы можете использовать фильтры в цикле For (for i in contours:) и с некоторыми условными операторами для фильтров. Для фильтров вы можете попробовать размер контуров (size = cv2.contourArea(i)) или высоту и ширину (x, y, w, h = cv2.boundingRect(i)). Тогда вы можете сделать такие утверждения, как if size > 100 and h > 100 and w < 50: cv2.drawContours(). Надеюсь, это даст вам представление о том, как действовать дальше. Ваше здоровье!

или вы можете проверить, какой контур самый большой.

Fred Guth 23.09.2018 13:16

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