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

4
我是一个OpenCV的新手,我已经构建了OpenCV并安装了Qt来运行这个例子http://code.google.com/p/opencvstereovision/source/checkout。结果是左右摄像头捕捉图像,校准后得到两个矫正后的图像和深度图。我想要做以下工作。我将在任何一个左或右图像上单击对象以聚焦。然后,我想检测另一幅图像中的相应像素并计算到该对象的距离。我现在不知道该怎么做,需要指导。也许如果我先计算出相应的点,我可以解决剩下的问题。我该如何做到这一点?
2个回答

4

看起来您已经了解了所需的内容。但这是一个棘手的问题——所以我建议参考著名的Hartley&Zisserman书籍,以获取权威解释。这里有相关章节的链接

简单来说...

我没有直接使用过opencvstereovision包装类,但听起来它已经消除了标定相机内部和外部参数的烦恼,并通过单应性矩阵(H)计算平面几何中的矫正,或通过基础矩阵(F)计算更复杂的极线几何的矫正。

可能和这个原始帖子相似。

这种矫正意味着已经建立了两幅图像中同一点之间的数学映射。

在我之前的回答中,您可以使用基础矩阵进行三角测量,即计算距离。然而,请注意这个距离仅限于图像坐标系(即以像素为单位)。
实际上,要执行“实际物理距离”测量所需的是计算本质矩阵(E),该矩阵将基础矩阵和相机内参(K)组合起来,将距离投影到现实世界中。

谢谢,伙计。我提到的链接是第12章的确切实现,并在书中详细解释。我猜测在第427页提到的cvComputeCorrespondEpilines也是所需的,对吗?我将传递一个图像中的像素,它应该找到另一个图像上的对应像素吗? - dramaticlook

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

请问您能否分享制作视差图的示例代码?我看到了stereo_match.cpp的示例代码,但是没有解释,所以很难理解。 - MMH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接