2013-04-27 107 views
3

我想估计一个物体到我的相机的距离。这必须使用Opencv。 我读过,我必须使用2个摄像头来代替一个,我发现了一些Matlab的代码,但我没有任何经验。 任何帮助将不胜感激。使用opencv拍摄物体的距离

+0

你知道物体和传感器的尺寸吗? – Niko 2013-04-27 09:06:52

+0

我只知道对象的尺寸。传感器是什么意思?我有相机 – 2013-04-27 09:25:01

+0

您一定需要知道相机传感器上像素的大小,例如mm。如果您没有这些信息但知道相机的焦距,则可以通过校准确定像素大小。 – Niko 2013-04-27 09:37:42

回答

3

是的,这肯定是可以计算的深度使用简单的针孔相机模型两个摄像头:

depth = bcm*fcm/(sensorWidthCm*disparity/(float)horizontalResolution); 

这里,为了找到平均视差(关键点的水平像素位置的差别),可以使用SurfDescriptorExtractor,并找到匹配对,你可以使用BFMatcher为链接: http://docs.opencv.org/doc/tutorials/features2d/feature_description/feature_description.html

FCM,BCM,sensorWidthCm和horizo​​ntalResolution是所有相机参数:fcm是相机焦距,bcm是相机的分离度,sensorWidthCm是相机传感器宽度,horizo​​ntalResolution是水平方向的像素数。事实上,你不需要单独需要所有这些参数。您只需要尝试一些已知深度即可找到该比例:bcm*fcm/sensorWidthCm在图像捕获过程中,水平图像分辨率已为人所知。

+0

谢谢,但您的摄像头传感器宽度是什么意思?我怎样才能得到这样的参数? – 2013-04-27 09:34:51

+0

这是相机的图像平面的宽度和投影到平面上的图像的实际尺寸。无法直接计算此参数,因此您需要使用已知深度的对象进行校准,以使用上述公式提取bcm * fcm/sensorWidthCm比率。 – 2013-04-27 09:38:02

1

您可以使用solvePnP函数,如果您知道对象的精确尺寸,并且它很容易检测。您还需要运行相机校准以在相机坐标中设置单位测量。