【发布时间】:2015-10-26 10:31:10
【问题描述】:
OpenCV 的 reprojectImageTo3D() 输出 “表示 3D 表面的 3 通道图像”。 您可以通过
访问这些数据Vec3f coordinates = _3dImage.at<Vec3f>(y,x);
float depth = _3dImage.at<Vec3f>(y,x)[2];
witch 返回一个向量 [X,Y,Z]。
在 Gary Bradski 和 Adrian Kaehler 的 “Learning OpenCV” 中,解释了深度是通过以下方式计算的
Z = f T / (x_left - x_right)
其中 f = 焦距,T = 眼距/相机之间的平移,(x_left - x_right) = 视差
这个精确的公式是在 OpenCV 中实现的(我检查了源代码 - 但是由于某种原因还有一个额外的负号)。问题是:X、Y、Z 值在哪个单位中指定?
T 是你的单位(例如 mm),x_l - x_r 是像素,[ f ] = ?
当您校准相机时,您以现实世界的单位(例如毫米)指定棋盘的大小。因此,内在矩阵是否具有真实世界的单位?还是以 px 指定?不幸的是,我在文档中找不到答案。
【问题讨论】:
标签: c++ opencv camera-calibration stereo-3d