Как правильно использовать Griddata и cv2.remap для преобразования изображенийPython

Программы на Python
Anonymous
Как правильно использовать Griddata и cv2.remap для преобразования изображений

Сообщение Anonymous »


Смотрите этот ответ: есть код, который использует griddata и cv2.remap для выравнивания изображения по судоку.

Я пытаюсь понять, как это работает, для этого я написал следующий код:

#%% импортировать cv2 из scipy.interpolate импортировать данные сетки импортировать numpy как np Grid_x, Grid_y = np.mgrid[0:5:6j, 0:5:6j] источник = np.array([[2,2], [3,2], [2,1], [3,1]]) назначение = np.array([[2,3], [3,3], [2,2], [3,2]]) Grid_z = Griddata (назначение, источник, (grid_x, Grid_y), метод = 'cubic', fill_value = 0) map_x = np.append([], [ar[:,1] для ar в Grid_z]).reshape(6,6) map_y = np.append([], [ar[:,0] для ar в Grid_z]).reshape(6,6) map_x_32 = map_x.astype('float32') map_y_32 = map_y.astype('float32') orig = np.array([[0,0,0,0,0,0], [1,1,1,1,1,1], [1,1,1,1,1,1], [0,0,0,0,0,0], [0,0,0,0,0,0], [0,0,0,0,0,0]], np.float32) печать("орг") печать (оригинал) деформированный = cv2.remap(orig, map_x_32, map_y_32, cv2.INTER_CUBIC) печать("искажено") print(np.round(искажено)) В этом коде вместо изображения судоку я поместил двумерный массив 6x6, но результат оказался не таким, как я ожидал.

org [[0. 0. 0. 0. 0. 0.] [1. 1. 1. 1. 1. 1.] [1. 1. 1. 1. 1. 1.] [0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.]] деформированный [[0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.] [0. 0. 1. 1. 0. 0.] [0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.]] Поскольку я перемещаю 4 пикселя в центре вниз, я ожидаю получить что-то вроде этого:

деформирован [[0. 0. 0. 0. 0. 0.] [1. 1. 0. 0. 1. 1.] [1. 1. 1. 1. 1. 1.] [0. 0. 1. 1. 0. 0.] [0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0.]] Из приведенного выше ответа я понял, что все, что мне нужно сделать, это найти исходные точки и присвоить каждой точке целевую точку, и изображение соответственно изменится, и именно так это действительно происходит в изображении судоку, но не в мой код, где я ошибаюсь?


Изображение



Изображение

Вернуться в «Python»