反转鱼眼失真

时间:2013-07-31 12:17:46

标签: c++ opencv image-processing distortion fisheye

我正在使用鱼眼摄像头,在进一步计算之前需要反过来扭曲, 在这个问题中,这种情况正在发生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))

这个问题就是这种重映射功能通过所有点并创建了一个新的图片。每帧都要花费很多时间。 他们寻找的方式是将鱼眼图片上的点对点转换为普通图片坐标。

我们采取的方法是对输入框架进行所有计算,然后将结果坐标转换为世界坐标,这样我们就不希望遍历图片的所有点并创建一个新的点。它。 (时间对我们来说非常重要)

在maxices mapx和mapy中有一些点到点的翻译​​,但很多点都没有完整的翻译。 我试图插入这个矩阵,但结果不是我想要的。

非常感谢任何帮助,即使是比cv.Remap更具时间效率的其他方法。

谢谢

1 个答案:

答案 0 :(得分:3)

我认为你想要的是cv.UndistortPoints()

假设您在扭曲的图像中检测到某些点要素distorted,您应该可以执行以下操作:

cv.UndistortPoints(distorted, undistorted, intrinsics, dist_coeffs)

这将允许您使用未失真的点,而不会为每个帧生成新的,未失真的图像。