Python OpenCV — проблемы трансформации перспективы

Я пишу скрипт для обработки изображения и извлечения 2D-штрих-кода PDF417, который затем будет декодирован. Я извлекаю ROI без проблем, но когда я пытаюсь исправить перспективу с помощью cv2.warpPerspective, результат не такой, как ожидалось.

Ниже приведен извлеченный штрих-код, красные точки — обнаруженные углы: Оригинал

Это результирующее изображение: Деформированный

Это код, который я использую для преобразования (значения находятся по сценарию, но для предыдущих изображений следующие):

box_or = np.float32([[23, 30],[395, 23],[26, 2141],[389, 2142]])
box_fix = np.float32([[0,0],[415,0],[0,2159],[415,2159]])
M = cv2.getPerspectiveTransform(box_or,box_fix)
warped = cv2.warpPerspective(img,M,(cols,rows))

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

Итак, есть ли способ избавиться от искажения перспективы? Я делаю что-то неправильно? Это известная ошибка или что? Любая помощь очень приветствуется.

Кстати, я использую OpenCV 3.3.0


person Christian Rodriguez    schedule 10.11.2017    source источник


Ответы (1)


Похоже, вы указываете координаты изображения как (y, x). Я знаю, что интерпретация координат варьируется в OpenCV. В коде примера гомографии они предоставляют координаты как (x, y) - по крайней мере, на основе их использования «h» и «w» в этом фрагменте:

h,w = img1.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)

Поэтому попробуйте указать координаты (x,y) как для getPerspectiveTransform, так и для warpPerspective.

person Spoonless    schedule 04.07.2018