Текущая ситуация: Я хотел бы обнаружить прямоугольники (или квадраты) внутри изображения, где контуры этих прямоугольников не являются сплошными. Как шахматная доска, где внешние контуры имеют целые.
Возможное решение: Я пытаюсь реализовать алгоритм активного контура, который должен помочь мне обнаружить внешний контур объекта. Я знаю некоторые точки за пределами объекта, которые можно использовать для сжатия и подгонки точек, пока объект помещается в него.
Поиск: Я обнаружил функцию cvSnakeImage более старой версии openCV, которая не поддерживается и больше не должна использоваться. Я нашел активную реализацию C ++ для контура, которая также использует более старый openCV и библиотеку boost. Я пытался, но не смог построить код. HiDiYANG / ActiveContour
Вопрос: Существует ли текущая реализация алгоритма активного контура в OpenCV? Есть ли лучшая доступная реализация, где я должен потратить время, чтобы понять реализацию?
Пример изображения:
У меня есть первое изображение с точками на серой границе и я хочу получить красный прямоугольник (второе изображение).
Для изображения, которое вы загрузили, простое объединение ограничивающих рамок контуров должно дать вам желаемый результат. ‘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)
Других решений пока нет …