OpenCV立体相机,检测物体距离

时间:2013-01-16 14:50:53

标签: opencv distance stereo-3d stereoscopy

我是OpenCV的新手,我已经构建了openCV并安装了Qt以成功运行示例http://code.google.com/p/opencvstereovision/source/checkout。结果是左右网络摄像头捕获并在校准后为两者和深度图完成校正后的图像。我想做以下事情。我将点击一个对象以聚焦在这些左或右图像中的任何一个。然后我想检测另一个图像中的相应像素并计算到该对象的距离。我现在不知道该怎么做,我需要指导。也许如果我先计算出相应的点,我可以将其余部分用完。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

看起来你很清楚需要什么。这是一种蠕虫 - 所以我一如既往地建议抓住着名的Hartley& Zisserman书为规范解释。这是相关章节的link

但简而言之......

我没有直接使用opencvstereovision包装器类,但听起来它已经解决了校准问题(相机内在函数和外在函数),并通过Homography矩阵(H)计算了平面几何或基本矩阵的校正(F)更复杂的极线几何。

可能类似于原始post

这种整改意味着它已经建立了每个图像中同一点之间的数学映射。

在之前的answer(来自我)中,您可以使用基本矩阵进行三角测量,即计算距离。

但请注意,此距离仅在图像坐标系中(即以像素为单位)。

执行“真实世界”测量(即实际物理距离)实际需要的是基本矩阵(E)的计算,它将基本矩阵和相机内在函数(K)组合到如果愿意的话,将距离投射到现实世界中。

答案 1 :(得分:1)

class StereoVar
{
StereoVar();
StereoVar(    int levels, double pyrScale,
                                int nIt, int minDisp, int maxDisp,
                                int poly_n, double poly_sigma, float fi,
                                float lambda, int penalization, int cycle,
                                int flags);
virtual ~StereoVar();

virtual void operator()(InputArray left, InputArray right, OutputArray disp);

int        levels;
double    pyrScale;
int        nIt;
int        minDisp;
int        maxDisp;
int        poly_n;
double    poly_sigma;
float    fi;
float    lambda;
int        penalization;
int        cycle;
int        flags;

...
};

请参阅:http://docs.opencv.org/modules/contrib/doc/stereo.html