如何使用 OpenCV 消除裁剪后的鱼眼图像失真
How to undistort a cropped fisheye image using OpenCV
我正在尝试使用 OpenCV 消除鱼眼图像的失真。我已经校准了相机,并且使用以下代码(我刚刚发布了相关部分)也获得了不错的无失真图像:
img = cv2.imread('img.jpeg') #image path of pic to distort
h,w = img.shape[:2]
Knew = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(K,D,(w,h),None)
Knew[(0,1), (0,1)] = .3* Knew[(0,1), (0,1)]
mapx, mapy = cv2.fisheye.initUndistortRectifyMap(K,D,None,Knew,(w,h),5)
img_undistorted = cv2.remap(img, mapx, mapy, cv2.INTER_LINEAR)
cv2.imshow('undistorted', img_undistorted)
cv2.waitKey(0)
cv2.destroyAllWindows()
现在我必须像这样裁剪鱼眼图像:
这些照片仅用于演示目的。
我使用鱼眼镜头的映射功能来确定我在右侧裁剪的点。但是,如果我使用与上面相同的代码(和相同的相机矩阵),输出的是一张非常奇怪的扭曲图片。
我也想过先不失真再裁剪,但是我无法准确计算出我必须以这种方式裁剪的点。所以我必须先裁剪图像。
那么如何正确地消除不对称裁剪的鱼眼图像的失真?
当您移动和裁剪图像时,鱼类相机校准参数不适合新相机。
也许您可以尝试通过填充零值来使图像对称。
重点是让两张图片的中心点在同一个位置。
参考:
http://answers.opencv.org/question/64614/fisheyeundistortimage-doesnt-work-what-wrong-with-my-code/
我正在尝试使用 OpenCV 消除鱼眼图像的失真。我已经校准了相机,并且使用以下代码(我刚刚发布了相关部分)也获得了不错的无失真图像:
img = cv2.imread('img.jpeg') #image path of pic to distort
h,w = img.shape[:2]
Knew = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(K,D,(w,h),None)
Knew[(0,1), (0,1)] = .3* Knew[(0,1), (0,1)]
mapx, mapy = cv2.fisheye.initUndistortRectifyMap(K,D,None,Knew,(w,h),5)
img_undistorted = cv2.remap(img, mapx, mapy, cv2.INTER_LINEAR)
cv2.imshow('undistorted', img_undistorted)
cv2.waitKey(0)
cv2.destroyAllWindows()
现在我必须像这样裁剪鱼眼图像:
这些照片仅用于演示目的。 我使用鱼眼镜头的映射功能来确定我在右侧裁剪的点。但是,如果我使用与上面相同的代码(和相同的相机矩阵),输出的是一张非常奇怪的扭曲图片。
我也想过先不失真再裁剪,但是我无法准确计算出我必须以这种方式裁剪的点。所以我必须先裁剪图像。
那么如何正确地消除不对称裁剪的鱼眼图像的失真?
当您移动和裁剪图像时,鱼类相机校准参数不适合新相机。
也许您可以尝试通过填充零值来使图像对称。 重点是让两张图片的中心点在同一个位置。
参考:
http://answers.opencv.org/question/64614/fisheyeundistortimage-doesnt-work-what-wrong-with-my-code/