OpenCV用户知道cvRemap用于进行几何变换。 mapx和mapy参数是给出映射的数据结构 目标图像中的信息。 我可以创建两个整数数组,其中包含1到1024或1到768之间的随机值 如果我处理图像(1024 X 768) 然后使用这些值分配mapx和mapy? 然后在cvRemap()中使用它们? 它会完成这项工作还是使用mapx和mapy的唯一方法是使用函数cvUndistortMap()获取其值? 我想知道,因为我想扭曲图像。 为了告诉你我已经检查了学习OpenCV 的书。
答案 0 :(得分:1)
我使用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
您想对此进行什么样的几何变换?