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

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

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

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


person MiHu    schedule 13.09.2018    source источник
comment
Если ваша продолговатая форма всегда значительно толще ответвлений — просто расширяйте изображение до тех пор, пока они не упадут, а затем найдите самый большой контур.   -  person Headcrab    schedule 14.09.2018


Ответы (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(). Надеюсь, это даст вам представление о том, как действовать дальше. Ваше здоровье!

person kavko    schedule 16.09.2018
comment
или вы можете проверить, какой контур самый большой. - person Fred Guth; 23.09.2018