Неправильная ориентация изображения при рисовании линии с помощью cv2.line

Я хочу провести линию из верхнего левого угла в нижний правый угол изображения.
Изображение горизонтальное и:

print(size)

возвращает:

(203, 248)

В моем коде я ожидаю диагональную линию от пикселя (0,0) до пикселя (203, 248). Однако я получаю диагональную линию от пикселя (0,0) до пикселя (248, 203), которая находится за границей изображения (sic!). Я полагаю метод cv2.line как-то поворачивает изображение, может кто подскажет?

Вот мой код:

import cv2

image_1 = cv2.imread('profilowe.jpeg',0)
size = image_1.shape
print(size)
cv2.line(image_1,(0,0),image_1.shape,255,1,16)

cv2.imshow('image',image_1)
cv2.waitKey(0)
cv2.destroyAllWindows()

Изображение с неправильно нарисованной линией сверху


person KorwinNaSloniu    schedule 21.02.2018    source источник


Ответы (1)


Это происходит потому, что в то время как NumPy индексирует массивы на основе принципа «сначала строки» (т. е. ваша форма (строки, столбцы)), cv2 индексирует на основе координат (x, y), что означает, что оси перевернуты. Это может раздражать, но это должно решить вашу проблему:

Попробуйте изменить:

cv2.line(image_1, (0,0), image_1.shape, 255, 1, 16)

to

cv2.line(image_1, (0,0), image_1.shape[::-1], 255, 1, 16)

[::-1] переворачивает кортеж, чтобы он стал (248, 203), и теперь ваша строка должна выглядеть нормально.

person mxbi    schedule 21.02.2018