В моем проекте я получаю точки на увеличенном изображении территории, которую я хочу обрезать, я преобразую ее, используя методы 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
.