-- 更新 2 --
如果您使用单个相机来计算距离,以下文章非常有用(尽管它使用 Python 而不是 C++):Find distance from camera to object/marker using Python and OpenCV
最佳链接是立体网络摄像头深度检测。这个开源项目的实现真的很清晰。
以下是原始问题。
对于我的项目,我使用两个相机(立体视觉)来跟踪物体并计算距离。我用 OpenCV 的示例代码校准了它们并生成了一个视差图。
我已经实现了一种基于颜色跟踪对象的方法(这会生成一个阈值图像)。
我的问题:如何使用视差图/矩阵计算到跟踪的彩色对象的距离?
您可以在下面找到获取每个像素的 x、y 和 z 坐标的代码片段。问题:Point.z 的单位是厘米、像素还是毫米?
我可以使用此代码获取到被跟踪对象的距离吗?
先感谢您!
cvReprojectImageTo3D(disparity, Image3D, _Q);
vector<CvPoint3D32f> PointArray;
CvPoint3D32f Point;
for (int y = 0; y < Image3D->rows; y++) {
float *data = (float *)(Image3D->data.ptr + y * Image3D->step);
for (int x = 0; x < Image3D->cols * 3; x = x + 3)
{
Point.x = data[x];
Point.y = data[x+1];
Point.z = data[x+2];
PointArray.push_back(Point);
//Depth > 10
if(Point.z > 10)
{
printf("%f %f %f", Point.x, Point.y, Point.z);
}
}
}
cvReleaseMat(&Image3D);
--更新 1 --
例如,我生成了这个阈值图像(左侧相机)。我几乎拥有相同的正确相机。
除了上述阈值图像外,应用程序还会生成视差图。如何在视差图中获取手部像素的 Z 坐标?
我实际上想获取手部像素的所有 Z 坐标来计算平均 Z 值(距离)(使用视差图)。