Алгоритм активного контура (змея) OpenCV 3.0

Текущая ситуация: Я хотел бы обнаружить прямоугольники (или квадраты) внутри изображения, где контуры этих прямоугольников не являются сплошными. Как шахматная доска, где внешние контуры имеют целые.

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

Поиск: Я обнаружил функцию cvSnakeImage более старой версии openCV, которая не поддерживается и больше не должна использоваться. Я нашел активную реализацию C ++ для контура, которая также использует более старый openCV и библиотеку boost. Я пытался, но не смог построить код. HiDiYANG / ActiveContour

Вопрос: Существует ли текущая реализация алгоритма активного контура в OpenCV? Есть ли лучшая доступная реализация, где я должен потратить время, чтобы понять реализацию?

Пример изображения:
У меня есть первое изображение с точками на серой границе и я хочу получить красный прямоугольник (второе изображение).

Пример изображения
введите описание изображения здесь

2

Решение

Для изображения, которое вы загрузили, простое объединение ограничивающих рамок контуров должно дать вам желаемый результат. ‘bb_union’ — это функция, которую вы должны написать для себя.

import cv2

img = cv2.imread('path to your image') # BGR image
im = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
im = 255 - im # your contours are black, so invert the image
_, contours, hierarchy = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
bb = None
for cnt in contours:
rect = cv2. boundingRect(cnt)
if (bb is None):
bb = rect
continue
bb = bb_union(rect, bb)
cv2.rectangle(img, bb, (0,0,255), 2)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]