Как рисовать линии между точками в OpenCV? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть массив кортежей:

a = [(375, 193)
(364, 113)
(277, 20)
(271, 16)
(52, 106)
(133, 266)
(289, 296)
(372, 282)]

Как рисовать линии между точками в OpenCV?

Вот мой код, который не работает:

for index, item in enumerate(a): 
    print (item[index]) 
    #cv2.line(image, item[index], item[index + 1], [0, 255, 0], 2) 

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Если вы просто хотите рисовать линии, как насчет cv2.polyines ?cv2.drawContours предпочтительнее, если у вас уже есть объект контуров.

cv2.polylines(image, 
              a, 
              isClosed = False,
              color = (0,255,0),
              thickness = 3, 
              linetype = cv2.LINE_AA)
0 голосов
/ 04 июня 2018

Используя рисованные контуры, вы можете нарисовать фигуру сразу.

img = np.zeros([512, 512, 3],np.uint8)
a = np.array([(375, 193), (364, 113), (277, 20), (271, 16), (52, 106), (133, 266), (289, 296), (372, 282)])
cv2.drawContours(img, [a], 0, (255,255,255), 2)

Если вы не хотите, чтобы изображение закрывалось, и хотите продолжить, как вы начали:

image = np.zeros([512, 512, 3],np.uint8)
pointsInside = [(375, 193), (364, 113), (277, 20), (271, 16), (52, 106), (133, 266), (289, 296), (372, 282)]

for index, item in enumerate(pointsInside): 
    if index == len(pointsInside) -1:
        break
    cv2.line(image, item, pointsInside[index + 1], [0, 255, 0], 2) 

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

Более Pythonic способ сделать вторую версию будет:

for point1, point2 in zip(a, a[1:]): 
    cv2.line(image, point1, point2, [0, 255, 0], 2) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...