我正在使用鱼眼镜头的相机,在进行任何进一步的计算之前,需要先将其反转,
在这个问题上,这正在发生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更省时的其他方法。
谢谢
最佳答案
我认为您想要的是 cv.UndistortPoints()
。
假设您在变形的图像中检测到一些点特征distorted
,则应该能够执行以下操作:
cv.UndistortPoints(distorted, undistorted, intrinsics, dist_coeffs)
这将使您可以处理不失真的点,而不必为每个帧生成新的不失真的图像。