warpPerspective обратное преобразование для точки в OpenCV Python - PullRequest
0 голосов
/ 01 июля 2019

В моем проекте я получаю точки на увеличенном изображении территории, которую я хочу обрезать, я преобразую ее, используя методы perspectiveTransform и warpPerspective, и получаю новое изображение, преобразуя его в прямоугольник.В этом новом изображении я нахожу определенные точки (x, y) и хочу преобразовать их назад в исходное изображение относительно его перспективы.Для этого я использовал тот же warpPerpective с теми же аргументами, но с флагом WARP_INVERSE_MAP.Тем не менее, он возвращает мне большой массив массивов нулей.

Как сделать инвертированное преобразование не для изображения, а для точки (в питоне)?

Это код, который я использую:

p = (123, 234)
p_array = np.array([[p[0], p[1]]], dtype=np.float32)
matrix = cv2.getPerspectiveTransform(points, output_points)
transformed_points = cv2.warpPerspective(p_array, matrix, table_image_size, cv2.WARP_INVERSE_MAP)

Где:

точек - 4 точки, которые должны быть вырезаны из исходного изображения,

output_points - 4 точки, где обрезанное изображение должно быть помещено в новое изображение

table_image_size - горизонтальный и вертикальный размер изображения

Этипараметры в прямом преобразовании и в этом обратном преобразовании идентичны, единственное отличие состоит в том, что вместо обрезанного изображения я вставляю p_array в методе warpPerspective.

1 Ответ

1 голос
/ 01 июля 2019

Из warpPerspective документация :

dsize: размер выходного изображения.

использование transformed_points = cv2.warpPerspective(p_array, matrix, (2,1), cv2.WARP_INVERSE_MAP)

...