Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv cv2.projectPoints实际上是如何工作的?_Opencv_Computer Vision_Linear Algebra_Projection_Camera Calibration - Fatal编程技术网

Opencv cv2.projectPoints实际上是如何工作的?

Opencv cv2.projectPoints实际上是如何工作的?,opencv,computer-vision,linear-algebra,projection,camera-calibration,Opencv,Computer Vision,Linear Algebra,Projection,Camera Calibration,我正在尝试编写自己的实现,只是为了练习,而我的实现并没有按照预期的那样运行 我假设一个针孔相机没有失真,所以我所做的就是把下面的方程应用到我所有的平面对象点上 假设在某个世界空间中(平面和相机都存在),平面距离为2个单位。因此,在世界坐标空间中,平面上的所有点都具有z=2。但是,在平面自身的坐标空间中,平面上的所有点都具有z=0。因此,向量[xyz1]实际上是[xy01]对于我试图投影的所有坐标。假设我在姿势估计中发现,对象在z方向上平移-2。将这个向量乘以找到的姿势,我得到向量 r11X +

我正在尝试编写自己的实现,只是为了练习,而我的实现并没有按照预期的那样运行

我假设一个针孔相机没有失真,所以我所做的就是把下面的方程应用到我所有的平面对象点上

假设在某个世界空间中(平面和相机都存在),平面距离为2个单位。因此,在世界坐标空间中,平面上的所有点都具有
z=2
。但是,在平面自身的坐标空间中,平面上的所有点都具有
z=0
。因此,向量
[xyz1]
实际上是
[xy01]
对于我试图投影的所有坐标。假设我在姿势估计中发现,对象在
z
方向上平移
-2
。将这个向量乘以找到的姿势,我得到向量

r11X + r12Y  + t1
r21X + r22Y  + t2
r31X + r32Y  + 2

但是现在,投影点不再具有
z=2
,因为
r31
r32
投影点的工作原理与您描述的公式相同。在没有旋转(旋转矩阵是恒等式)的简单情况下,最后会得到如下结果:

X + t1
Y + t2
2
这正是你所期望的。您正在使用姿势估计,这意味着这个简单的情况几乎永远不会发生,因为您总是会有一些错误,但应该非常小。。。。这意味着在结束时,
r31X+r32Y
应导致接近0的结果。如果情况并非如此,则姿势估计可能存在错误。同时,考虑这两个值也可以相互抵消。< /P> 还有一件事,一旦你乘以整个公式,你将得到一个3D向量,你必须将向量除以最后一个分量,才能得到2D投影点


如果可能的话,你最好给出一个有数字的例子,以了解你实际有多大的误差,并看看这是否是由于另一件事造成的…

Afair在opengl文档或ted书籍或其他东西中对3d投影有一些很好的解释。