到物体的距离网络摄像头 C920HD 或使用 OpenCV calibrate.py

Distance to Object Webcam C920HD or use OpenCV calibrate.py

我正在尝试确定一个物体的距离和一个物体的高度到我的相机。是否有可能或者我是否需要使用 OpenCV calibrate.py 来收集更多信息?我很困惑,因为罗技 C920HD 有 3 MP 并通过软件扩展到 15 MP。

我有以下信息:

我检查了这个公式:

distance (mm) = 3.67(mm) * 180(mm) * 1080(px) / 511 (px) * (1/2.88)(inches)*2.54 (mm/inches)

这给我 15.8 厘米。虽然应该是60cm左右吧

我做错了什么?

感谢帮助!

您的公式看起来是正确的,但是,要使其适用于整个图像平面,您应该首先校正镜头畸变,例如,按照答案

在此过程中,OpenCV 镜头校准模块将估算您的真实焦距。

填写公式得到

Distance = 3.67 mm * 180 mm * 1080/511 / sensor_height_mm = 1396 mm^2 / sensor_height_mm

留下 sensor_height_mm 未知。鉴于您的相机是 16:9 格式

w^2 + h^2 = D^2
(16x)^2+(9x)^2 = D^2
<=>
x = sqrt( D^2/337 )
<=>
h = 9x = 9*sqrt( D^2/337 )

记住16的规则:

https://photo.stackexchange.com/questions/24952/why-is-a-1-sensor-actually-13-2-%C3%97-8-8mm/24954

最重要的是,1/2.88" 传感器的图像圆直径为 16/2.88 毫米,而不是 25.4/2.88 毫米。有趣的是,真实的图像圆直径是公制的。因此传感器直径为

D = 16 mm/ 2.88 = 5.556 mm

sensor_height_mm = h = 2.72 mm

给予

Distance = 513 mm

请注意,此距离是相对于镜头第一主点而不是传感器位置或镜头前部元件位置测量的。

当您校正桶形失真时,读数应该会变得更加准确。这台相机相当多。我有类似的。

希望这对您有所帮助。