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

时间:2019-02-03 18:11:41

标签: python opencv computer-vision

我有一个180度的鱼眼镜头,我希望获得尽可能宽的视野的不失真图像。最终,我希望能够使用它通过鱼眼镜头创建180度自上而下的图像。为此,我想先使图像失真,同时保留尽可能多的图像数据。

我使用opencv fisheye.calibrate在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),就无法增加不失真输出的视场。但是,我看到人们能够从不同的角度创建多张未失真的图像。例如,给定上面的原始鱼眼图像,我希望能够从不同的角度(例如thisthis)创建图像,然后可以将它们缝合在一起以获得更大的视野。是否可以通过调节opencv不失真函数的校准参数来实现这一目标?

我认为这是有可能的,因为我在其他情况下(例如here (using java and boofCV))已经看到了它。

对于获得更大视野的替代方法的任何建议也将不胜感激。

0 个答案:

没有答案