Я использую cvRemap, чтобы применить коррекцию искажения.
Часть map_x имеет разрешение изображения и сохраняет для каждого пикселя смещение по оси x, которое будет применено, в то время как часть map_y одинакова для смещения по оси y.
при неискажении
# create map_x/map_y
self.map_x = cvCreateImage(cvGetSize(self.image), IPL_DEPTH_32F, 1)
self.map_y = cvCreateImage(cvGetSize(self.image), IPL_DEPTH_32F, 1)
# I know the camera intrisic already so create a distortion map out
# of it for each image pixel
# this defined where each pixel has to go so the image is no longer
# distorded
cvInitUndistortMap(self.intrinsic, self.distortion, self.map_x, self.map_y)
# later in the code:
# "image_raw" is the distorted image, i want to store the undistorted into
# "self.image"
cvRemap(image_raw, self.image, self.map_x, self.map_y)
Следовательно: map_x / map_y являются значениями с плавающей запятой и в разрешении изображения, как два изображения в 1024x768. То, что происходит в cvRemap, в основном напоминает
orig_pixel = input_image[x,y]
new_x = map_x[x,y]
new_y = map_y[x,y]
output_image[new_x,new_y] = orig_pixel
Какие геометрические преобразования вы хотите сделать с этим?