gpt4 book ai didi

opencv - 我如何使用opencv测量视频中检测到的物体与摄像机的距离?

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:01 32 4
gpt4 key购买 nike

我只知道视频中对象的高度和宽度。有人可以指导我使用 C 或 C++ 计算视频中检测到的物体与摄像机的距离吗?有什么算法或公式可以做到这一点吗?提前致谢

最佳答案

Martin Ch 说您需要校准相机是正确的,但正如 vasile 指出的那样,这不是线性变化。校准你的相机意味着找到这个矩阵

camera_matrix = [fx,0 ,cx,
0,fy,cy,
0,0, 1];

此矩阵在 3 维坐标 (x,y,z) 上运行并将其转换为二维 homogeneous协调。要转换为您的常规欧氏 (x,y) 坐标,只需将第一个和第二个分量除以第三个分量即可。那么现在这些变量在做什么?

cx/cy:它们的存在是为了让您根据需要更改坐标系。例如,您可能希望相机空间中的原点位于图像的左上角,而世界空间中的原点位于图像的中心。在那种情况下

cx = -width/2;
cy = -height/2;

如果您不更改坐标系,只需将它们保留为 0。

fx/fy:这些以 x 像素和 y 像素为单位指定您的焦距,它们通常接近相同的值,因此您可以只给它们相同的值 f .这些参数本质上定义了透视效果的强度。假设没有 cx 和 cy,从世界坐标到屏幕坐标的映射(你可以从上面的矩阵自己算出)

xsc = fx*xworld/zworld;
ysc = fy*yworld/zworld;

如您所见,使物体在近处变大而在远处变小的重要量是比率 f/z。它不是线性的,但通过使用齐次坐标,我们仍然可以使用线性变换。

简而言之。使用校准的相机和世界坐标中已知的物体大小,您可以计算它与相机的距离。如果您缺少其中任何一个,那是不可能的。在不知道世界坐标中的对象大小的情况下,您可以做的最好的事情是通过确定比率 xworld/zworld(知道 fx)将其屏幕位置映射到世界坐标中的射线。

关于opencv - 我如何使用opencv测量视频中检测到的物体与摄像机的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790410/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com