4

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

4

2 回答 2

4

看起来你对需要什么有一个很好的了解。这有点像一罐蠕虫-因此,我一如既往地建议您获取著名的 Hartley & Zisserman 书籍以获得规范的解释。这是相关章节的链接。

但简而言之...

我没有直接使用 opencvstereovision 包装类,但听起来它已经使校准(相机内在和外在)变得头疼,并通过平面几何的单应矩阵 (H) 或基本矩阵 (F) 计算了校正对于更复杂的对极几何。

可能类似于此原始帖子

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

在之前的答案(来自我)中,您可以通过使用基本矩阵执行三角测量来进行数学运算 - 即计算距离。

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

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

于 2013-01-16T15:25:57.487 回答
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

于 2013-01-16T15:11:52.347 回答