我正在使用鱼眼镜头的相机,在进行任何进一步的计算之前,需要先将其反转,
在这个问题上,这正在发生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)

这将使您可以处理不失真的点,而不必为每个帧生成新的不失真的图像。

10-07 19:21