Я думаю, что вы ищете функцию переотображения в opencv . Как описано в ссылке, функция переназначает значения на основе индексирования массивов mapx и mapy: ??? (x, y) = ??? (mapx (x, y), mapy (x, y))
ЕслиЯ правильно понял, что вы хотели бы сделать, для начала вам нужно создать базовые индексы для mapx и mapy:
mapx_base, mapy_base = np.meshgrid(np.arange(shape[0]), np.arange(shape[1]))
Затем деформировать индексы изображений с вашим векторным полем. Здесь я умножаюсь, чтобы увеличить деформацию.
mapx = mapx_base + field_x*30
mapy = mapy_base + field_y*30
Наконец, повторно сэмплируем ваше изображение
img = cv2.imread('apple.jpg', 0).astype(np.float32)
deformed_apple = cv2.remap(img, mapx.astype(np.float32), mapy.astype(np.float32), cv2.INTER_LINEAR)
Конечно, поле должно быть сглажено, если вы хотите иметь менее шумную деформацию.
Надеюсь, это поможет!