在 Python 和 OpenCV 中使用立体图像计算真实世界坐标
Calculating real world co-ordinates using stereo images in Python and OpenCV
我正在使用一对立体图像计算场景中对象的真实世界坐标。这些图像是完美针孔相机的模拟,因此没有需要校正的失真,也没有旋转。我知道 OpenCV 有一堆函数可以校准立体相机和创建视差图,但是如果我只想计算一个点的坐标,有没有简单的方法可以做到这一点?
1) 不旋转,仅平行于像面水平轴平移,焦距相等的相机。
用"f"表示常用焦距。用 "b" 表示立体对的基线,即相机光学中心之间的距离。给定一个 3D 点 P,在水平图像坐标 x_left 和 x_right 的两个相机中可见,用 "d" 表示它们的差异,即差异 d = x_left - x_right.
根据初等几何,P 在左相机坐标中的深度 z_left 为:
z_left = b * f / d.
2) 任何其他情况(焦距不等、其他内在参数不同、非线性镜头畸变、相机间旋转、平移不平行于x轴等):
不嫌麻烦,用OpenCV,
我正在使用一对立体图像计算场景中对象的真实世界坐标。这些图像是完美针孔相机的模拟,因此没有需要校正的失真,也没有旋转。我知道 OpenCV 有一堆函数可以校准立体相机和创建视差图,但是如果我只想计算一个点的坐标,有没有简单的方法可以做到这一点?
1) 不旋转,仅平行于像面水平轴平移,焦距相等的相机。
用"f"表示常用焦距。用 "b" 表示立体对的基线,即相机光学中心之间的距离。给定一个 3D 点 P,在水平图像坐标 x_left 和 x_right 的两个相机中可见,用 "d" 表示它们的差异,即差异 d = x_left - x_right.
根据初等几何,P 在左相机坐标中的深度 z_left 为:
z_left = b * f / d.
2) 任何其他情况(焦距不等、其他内在参数不同、非线性镜头畸变、相机间旋转、平移不平行于x轴等):
不嫌麻烦,用OpenCV,