OpenCV从不同的角度创建未失真的图像

2024-04-26 04:22:05 发布

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

我有一个180度鱼眼照相机,我想获得一个尽可能宽的视野的无失真图像。最后,我希望能够使用这个来创建一个180度的自上而下的图像使用鱼眼相机。为此,我想先取消图像的失真,同时尽可能多地保留图像数据。在

我用了opencv鱼眼。校准在python中,使用了以不同角度拍摄的棋盘图像,这正确地消除了鱼眼图像的失真,给了我一个不错的结果。然而,由于不扭曲图像,因此得到的图像的视野比鱼眼图像差得多。在

鱼眼图像

enter image description here

无视场的未失真图像

enter image description here

当前代码

DIM=(960, 540)
K=np.array([[263.1021173128426, 0.0, 477.98780306608234], [0.0, 261.30612719984185, 300.714230825097], [0.0, 0.0, 1.0]])
D=np.array([[-0.0007727739728155351], [-0.10019345132548932], [0.10790597488851726], [-0.040655761660861996]])
def undistort(img):
    h,w = img.shape[:2]
    map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM, cv2.CV_16SC2)
    return cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT)

我的理解是,如果不将输出拉伸成不需要的形状(例如in this image),就没有办法增加未失真输出的视野。然而,我看到人们能够从不同的角度创造出不失真的图像。例如,给定上面的原始鱼眼图像,我希望能够从不同的角度创建图像,例如this和{a5},然后将它们缝合在一起以获得更大的视野。有没有办法调整opencv不失真功能的校准参数来实现这一点?在

我假设这是可能的,正如我在其他上下文中看到的那样,比如here (using java and boofCV)。在

如果您能就实现更广泛视野的其他方法提出任何建议,我们也将不胜感激。在


Tags: 图像imgnpthisarraycv2opencv角度