【发布时间】:2013-07-31 12:17:45
【问题描述】:
我正在使用鱼眼相机,在进一步计算之前需要反转失真, 在这个问题中,这正在发生Correcting fisheye distortion
src = cv.LoadImage(src)
dst = cv.CreateImage(cv.GetSize(src), src.depth, src.nChannels)
mapx = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
mapy = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
cv.InitUndistortMap(intrinsics, dist_coeffs, mapx, mapy)
cv.Remap(src, dst, mapx, mapy, cv.CV_INTER_LINEAR + cv.CV_WARP_FILL_OUTLIERS, cv.ScalarAll(0))
这样做的问题是,重映射函数通过这种方式遍历所有点并从中创建新图片。每帧都这样做很耗时。 我正在寻找的方法是将鱼眼图片上的点对点转换为正常图片坐标。
我们采用的方法是在输入帧上进行所有计算,然后将结果坐标转换为世界坐标,因此我们不想遍历图片的所有点并创建一个新的它。 (时间对我们来说真的很重要)
在矩阵 mapx 和 mapy 中有一些点到点的转换,但很多点没有完全转换。 我试图插入这个矩阵,但结果不是我想要的。
任何帮助都将不胜感激,即使是比 cv.Remap 更省时的其他方法。
谢谢
【问题讨论】:
-
从这个问题中不清楚您是想要不扭曲图像还是只是一组离散的图像位置(可能不是整数,即具有亚像素精度)。如果是后者,pf 位置的数量是否会比图像区域小得多?请澄清。
-
@FrancescoCallari 是的,你是对的,我只想要少量的点,基本上我想拾取轮廓会找到它们的中心点,并希望它把它带到不失真的位置,然后鸟瞰位置
标签: c++ opencv image-processing distortion fisheye