我正在为Android制作基于相机的应用程序。我的问题是,当我有一个图像中的对象,在相机上找到的真实角度:
1.图像中该对象的长度,以像素为单位
2.相机的垂直视角,
3.图像的长度,以像素为单位。
对图像处理不熟悉,我有这个(可能是基本的)疑问。对象在相机上对着的角度与相机拍摄的对象图像中的像素数之间是否存在线性关系?对角:将对象的最顶点连接到摄像机,然后将对象的最底部点连接到摄像机。在相机处形成的角度是对角。例如:考虑一个垂直的图像,高度为200像素。相机的垂直视角为20度。所以,我可以说,这20度覆盖了200像素的图像。现在,有一部分图像(一个物体)高度为10个像素。我想在物理世界中找到这个物体在相机上所对的角度。我是否正确地说,由于200像素被20度覆盖,10个像素将覆盖1度?也就是说,该物体在相机上对着1度的角度?
如图所示,我知道L(图像),P(图像中的物体),x(相机的垂直视角)的值,我想找到y,即物体所对的角度在相机上。我的假设是(y / P)=(x / L),这是直接成比例的。这个假设是正确的吗?
答案 0 :(得分:2)
画水平线。它的长度D是到物体的距离。
D * tg(X / 2)= L / 2
和
D * tg(Y / 2)= P / 2
所以
Y = 2 * Arctg(tg(X / 2)* P / L)
(当角度很小时,它们(粗略地)成正比)
增加:非居中对象的情况。
P0,P1-物体的像素坐标相对于中心点D
距离Dx = | OD | = L * ctg(X / 2)
坐标 D =(Dx,0)
Y =角度( OP1,OP0 )= ArcCos(( OP1 x OP0 )/(| OP1 | * | OP0 |)),其中x表示标量积
Y = ArcCos((Dx * Dx + P1 * P0)/ Sqrt((Dx * Dx + P1 * P1)(Dx Dx + P0 * P0)))
实施例: L = L1-L0 = 768像素
X = 42度
Dx = 1000(粗略)
P1位置= 100像素
P0位置= -50像素
Y = ArcCos((1000 * 1000-100 * 50)/(Sqrt((1000 * 1000 + 100 * 100)*(1000 * 1000 + 50 * 50))))= 7度(粗糙)