我怎样才能计算出相机前物体的角度?我的相机分辨率是1280x1024,镜头焦距是8毫米,CMOS上每个像素的像素大小是4.8微米。当然,从这个角度来计算角度是可能的。我还计算了物体到摄像机的距离,一切都在同一水平面上。所以只有X坐标才有意思,对吧?在
我使用OpenCV和Python进行处理。在
我的想法是把镜头的焦距和被探测物体从传感器中间的X偏移量结合起来,但我确实从中得到了奇怪的角度。在
这是角度估计的代码:
first the point X coordinate, second the width of the whole sensor (1280 pixels * 4.8um) in mm, third the focal length in mm.
angle = (pointInterpolatedX*6.144)/8
有谁能帮我一下吗?谢谢!在
另外,我看了一下这个主题here,但我不太明白。我有更多关于我的相机的信息,而且我的物体只能在二维空间移动,而不能在三维空间移动。所以也许有一个聪明的方法可以在摄像机前估计它在地面上的位置。 OpenCV有什么我可以用的功能吗?在
为了获得真正的准确度,你需要校准相机。下面的结果对于一阶近似就足够了。在
下面的图像描述了我将在这个响应中使用的图像坐标系(Xi,Yi)和相机坐标系(Xc,Yc,Zc)它们是OpenCV使用的坐标系。它还显示两个图像点p1和p2,这可能是您感兴趣对象的图像的边界,并且相应的光线r1和r2将它们投影到相机中心。在
首先,让我们将焦距镜头转换为像素以简化计算。在4.8 um点距时,传感器的宽度为4.8*1280 um=6.14 mm。因此,按比例,f_pix:8 mm=1280 pix:6.14 mm,因此f_pix=1667像素。我们现在可以写出最简单的针孔摄像机矩阵,假设摄像机的焦轴与图像正交,并与图像中心相交。用纽比的符号:
给定该矩阵,且摄像机坐标中的任何3D点p=(X,Y,Z),其投影到图像上的图像坐标(X,Y)计算如下:
^{pr2}$相反,给定一对像素坐标(x,y),则将该像素反向投影到3D空间的3D光线r由下式给出:
这是一条“射线”,在这个意义上,所有3D点R=s*R将位于穿过相机中心和像素(x,y)的同一条线上。在
因此,给定边界图像点p1=(x1,y1)和p2=(x2,y2),您可以如上所述计算射线r1和r2将它们反向投影到三维空间中。它们之间的角度可以通过点积公式轻松计算:
重申一下,以上公式只是一个近似值。一个真正的相机会有一些非线性的镜头失真,你必须纠正这些失真才能得到准确的结果,并且会有一个相对于图像稍微偏离中心的焦轴。所有这些问题都是通过校准摄像机来解决的。在
不,你需要知道你的相机角度,拿一个量角器来测量,这样你就可以用这样的东西了
我的凸轮角示例:
相关问题 更多 >
编程相关推荐