как рисовать контуры объектов на изображении на отдельном изображении - PullRequest
0 голосов
/ 10 мая 2019

Я работаю над головоломкой, моя последняя задача - определить тип ребра головоломки.

enter image description here

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

enter image description here

затем заполнить одну сторону строки цветом и попытаться обработать его, чтобы решить, какой это тип края.

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

мой подход :: Один из способов - сканировать пиксель за пикселем и находить черные пиксели там, где рядом есть монахиня с черным пикселем. это код, который я могу реализовать. но это похоже на примитивный и трудоемкий подход.

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

заранее спасибо ..

1 Ответ

1 голос
/ 10 мая 2019

Сначала преобразуйте ваше цветное изображение в оттенки серого. Затем примените порог, скажем, ноль, чтобы получить двоичное изображение. Возможно, вам придется использовать морфологические операции для дальнейшей обработки двоичного изображения, если есть дыры. Затем найдите контуры этого изображения и нарисуйте их на новом изображении.

rgb

binary

* +1012 *cont

Ниже приведен простой код с использованием opencv 4.0.1 в python 2.7.

bgr = cv2.imread('puzzle.png')
gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
_, roi = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)
cv2.imwrite('/home/dhanushka/stack/roi.png', roi)
cont = cv2.findContours(roi, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
output = np.zeros(gray.shape, dtype=np.uint8)
cv2.drawContours(output, cont[0], -1, (255, 255, 255))

# removing boundary
boundary = 255*np.ones(gray.shape, dtype=np.uint8)
boundary[1:boundary.shape[0]-1, 1:boundary.shape[1]-1] = 0

toremove = output & boundary
output = output ^ toremove
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...