Image processing OpenCV:如何使用图像计算相机和对象之间的距离?
我是OpenCV的新手。我使用以下公式计算距离:Image processing OpenCV:如何使用图像计算相机和对象之间的距离?,image-processing,opencv,Image Processing,Opencv,我是OpenCV的新手。我使用以下公式计算距离: distance to object (mm) = focal length (mm) * real height of the object (mm) * image height (pixels) ---------------------------------------------------------------- o
distance to object (mm) = focal length (mm) * real height of the object (mm) * image height (pixels)
----------------------------------------------------------------
object height (pixels) * sensor height (mm)
OpenCV中是否有可以确定对象距离的函数?如果没有,是否有对示例代码的引用?opencv中没有此类函数可用于计算对象与相机之间的距离。见此: 您应该知道,参数取决于相机,如果相机更改,参数也会更改
- 焦距(单位为毫米和每毫米像素数)
- 图像传感器的物理尺寸(计算每毫米像素数)
calibrate.py
工具和源代码中提供的棋盘模式PNG生成校准矩阵。我从尽可能多的角度拍摄了大约20多张棋盘照片,并将这些文件导出到我的Mac电脑。有关更多详细信息,请查看
摄像头校准矩阵(iPhone 5S后摄像头)
- f_x=2803
- f_y=2805
- c_x=1637
- c_y=1271
f_x = f * m_x
f_y = f * m_y
因为每个公式有两个变量,我们可以求解m_x和m_y。我的平均成绩是2803分和2805分,得到2804分
m = 2804px / 4.15mm = 676px/mm
对象大小(以像素为单位)
我使用OpenCV(C++)从这些点中取出一个点,并确定对象的大小为41px。请注意,我已经检索了对象的角,并询问了边界矩形的大小
cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));
小皱纹
在640x480的摄像机上拍摄的视频中,该对象为41px
以较低分辨率转换px/mm
给定41px/133px/mm,我们看到图像传感器上物体的大小是.308mm
距离公式
这正好很好。我测量了910毫米,经过一些改进,我可能可以减少误差
欢迎反馈
相似三角形法
Adrian在pyimagesearch.com上演示。我们事先讨论过这个话题,他采用了类似的三角形方法,我做了相机内部分析。相机参数我保持不变,我知道它们是否有必要有两个相机?你给出的公式是一个理想情况,当相机的主轴垂直于物体平面……如果相机的主轴倾斜到对象平面(这通常是真实世界场景…)然后我们得到物体在图像中的投影…投影的图像不能给你真实世界中物体尺寸的正确想法…因此,对于一台相机来说,如果你事先不知道相机相对于物体的方向,这是很困难的…如果你知道所有的细节,你还需要校准相机吗关于相机的细节已经有了吗?+1正在寻找相同的,你找到了任何解决方案吗?非常好的解释。但是如果你不能校准你的相机,你也可以这样做吗?那么,您会使用本机相机分辨率吗?当不校正失真时,这有多可靠?如何仅使用本机解析应用此方法?抱歉问了这么多问题;)如果没有摄像机校准,你就要关机了。我想您可以使用传感器规格来获取测量值,或者只是在各种设备中建立一个摄像头数据库。我们可以放心地假设所有iPhone 5s的背面摄像头都在一定的公差范围内。此外,找出如何转储高通Vuforia libraries的摄像头校准数据库将是一项有人可以调查的任务。好的,让我详细说明我的问题。我想在没有相机的情况下计算给定图像中特定对象的距离。这是一个佳能EOS 60D与失真校正。从JPEG图像中的EXIF标签,我可以检索焦距。我知道物体的尺寸单位是毫米。你认为你的方法适用于这个问题吗?不。公式是:距离=尺寸×焦距/传感器上的尺寸。整个方法取决于在给定焦距和被测物体尺寸的情况下,计算出物体在传感器上的大小。否则,你有两个未知数。@桑德,你可以考虑使用完全相同的三角形的完全不同的方法。有关详细信息,请参阅
cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));
3264/676 = 640/x
x = 133 px/mm
distance_mm = object_real_world_mm * focal-length_mm / object_image_sensor_mm
distance_mm = 70mm * 4.15mm / .308mm
distance_mm = 943mm