如何使用OpenCV取消鱼眼图像的失真

2024-09-30 18:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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()

现在我必须像这样裁剪鱼眼图像: Photo from wikipediaenter image description here

这些照片仅供演示之用。 我使用鱼眼镜头的映射功能来确定我在右侧裁剪的点。但是,如果我使用与上面相同的代码(和相同的摄像机矩阵),输出的是一张非常奇怪的扭曲图片。在

我也考虑过先不失真,然后裁剪,但是我无法精确计算出我必须这样裁剪的点。所以我必须先裁剪图像。在

那么,如何正确地不失真一个不对称的鱼眼图像?在


Tags: 代码图像noneimgcv2opencvjpeg校准