Как я могу нарисовать два контура на изображении, учитывая расстояние между ними 100 пикселей, используя python и opencv - PullRequest
1 голос
/ 14 февраля 2020

Я попробовал нарисовать внешний контур, используя следующие линии

cnts, hierarchy = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(orig, cnts, -1, (0, 255, 0), 3) # this draws the external contour

Ссылаясь на нижнее enter image description here

Как мне добраться до ниже?

enter image description here

1 Ответ

1 голос
/ 14 февраля 2020

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

import cv2
import numpy as np

img = cv2.imread('contour.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
cnts, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, cnts, -1, (0, 255, 0), 3)
mask = np.zeros(img.shape[:2], dtype=np.uint8)
cv2.drawContours(mask, cnts, -1, 255, 1)
kernel = np.ones((100, 100), np.uint8)
mask = cv2.dilate(mask, kernel, iterations = 1)
cnts, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, cnts, 1, (255, 0, 0), 3)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

result

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