来自形成立体系统的两个校准相机的 openCV 深度图

Posted

技术标签:

【中文标题】来自形成立体系统的两个校准相机的 openCV 深度图【英文标题】:openCV Depth map from two calibrated cameras forming a stereoscopic system 【发布时间】:2012-08-24 07:47:50 【问题描述】:

我需要一些帮助来使用 openCV 库继续我的代码,以便找到相机中看到的对象的深度值。

我已经进行了校准并找到了视差图,我无法找到关于如何计算相机拍摄的两张照片中每个像素的深度值的明确帮助。

谁能帮帮我? 谢谢

【问题讨论】:

【参考方案1】:

这是您的问题的链接,其中包括一个简单的深度估计算法: http://www.epixea.com/research/multi-view-coding-thesisse13.html

【讨论】:

非常感谢,但我的问题是我想继续我用于校准的代码。我使用了由blog.martinperis.com/2011/01/… 给出的代码,我已经到了最后一步,但我不知道是什么:d = pointRightImage.X - pointLeftImage.X;所以我虽然也许有人可以有一种更简单的方法来计算 openCV 中的深度...... 我认为您链接的博文此时不再有用。顺便说一句,如果您正在研究计算机视觉,请不要被数学解释吓到,因为您需要学习并获得对您所做工作的数学洞察力。 是的,我同意,我认为这就是我的问题所在,如果我从数学上知道“d = pointRightImage.X - pointLeftImage.X”是什么意思,我可以创建自己的代码。非常感谢您的建议,我可能会继续努力【参考方案2】:

您可以使用这些公式来计算点云 3D 坐标:

Z = fB/D
X = (col-w/2)*Z/f
Y = (h/2-row)*Z/f

其中X、Y、Z为世界坐标,f——标定后相机的焦距(以像素为单位),B为基线或相机间距,D为视差; col, row 表示图像中像素的列和行坐标,尺寸为 h, w。

但是,如果您设法校准了相机并获得了视差图,那么您必须已经知道这一点。校准和视差图计算比上述计算复杂一个数量级。

【讨论】:

以上是关于来自形成立体系统的两个校准相机的 openCV 深度图的主要内容,如果未能解决你的问题,请参考以下文章

Python OpenCV 立体相机校准阵列错误:TypeError:不支持 imagePoints1 数据类型 = 17

OpenCV 立体匹配/校准

opencv模块介绍

OpenCV中的相机失真内外参不失真图像相机校准

深度图 - 带有 OpenCV 的 Android 中的立体图像

是否必须校准相机才能与 StereoBM 一起使用?