Используя рисованные контуры, вы можете нарисовать фигуру сразу.
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)