我有一个180度鱼眼照相机,我想获得一个尽可能宽的视野的无失真图像。最后,我希望能够使用这个来创建一个180度的自上而下的图像使用鱼眼相机。为此,我想先取消图像的失真,同时尽可能多地保留图像数据。在
我用了opencv鱼眼。校准在python中,使用了以不同角度拍摄的棋盘图像,这正确地消除了鱼眼图像的失真,给了我一个不错的结果。然而,由于不扭曲图像,因此得到的图像的视野比鱼眼图像差得多。在
鱼眼图像:
无视场的未失真图像:
当前代码:
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)。在
如果您能就实现更广泛视野的其他方法提出任何建议,我们也将不胜感激。在
目前没有回答
相关问题 更多 >
编程相关推荐