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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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中查找像素的世界空间坐标_Opencv_Image Processing_3d_2d - Fatal编程技术网

在OpenCV中查找像素的世界空间坐标

在OpenCV中查找像素的世界空间坐标,opencv,image-processing,3d,2d,Opencv,Image Processing,3d,2d,我需要使用OpenCV找到像素的世界坐标。所以当我在我的图像中取像素(0,0)(即左上角)时,我想知道这个像素对应于我的图像平面上的3D世界空间坐标。我知道一个像素对应于世界空间中的一行3D点,但我想要一个位于图像平面本身的特定像素 这是OpenCV针孔模型的公式,我有第一个(内部)和第二个(外部)矩阵。我知道我有u和v,但我不知道如何从这个u和v到正确的X,Y和Z坐标 我已经尝试过的: 我想把s设为1,通过添加1从[u v 1]^T生成一个齐次坐标,如[u v 1]^T。然后我将内部变量与

我需要使用OpenCV找到像素的世界坐标。所以当我在我的图像中取像素(0,0)(即左上角)时,我想知道这个像素对应于我的图像平面上的3D世界空间坐标。我知道一个像素对应于世界空间中的一行3D点,但我想要一个位于图像平面本身的特定像素

这是OpenCV针孔模型的公式,我有第一个(内部)和第二个(外部)矩阵。我知道我有u和v,但我不知道如何从这个u和v到正确的X,Y和Z坐标

我已经尝试过的:

  • 我想把s设为1,通过添加1从[u v 1]^T生成一个齐次坐标,如[u v 1]^T。然后我将内部变量与外部变量相乘,并通过添加以下行将其生成4x4矩阵:[0 1]。然后将其倒置并乘以[u v 1 1]^T,得到我的X、Y和Z。但是当我检查这样计算的四个像素是否位于同一平面(图像平面)上时,这是错误的

有什么想法吗

IIUC您希望交点I与从摄影机中心向后投影给定像素p的光线的图像平面相交

让我们先定义坐标系。通常的OpenCV约定如下所示:

  • 图像坐标:原点位于左上角,u轴向右(增加列),v轴向下
  • 摄影机坐标:原点位于摄影机中心C,z轴朝向场景,x轴向右,y轴向下
然后,摄影机帧中的图像平面为z=fx,其中fx是以像素为单位测量的焦距,像素(u,v)具有摄影机坐标(u-cx,v-cy,fx)

将它们乘以(固有的)摄像机矩阵K的倒数,你将得到测量摄像机坐标中的同一点


最后,将其乘以世界到相机坐标变换[R | t]的倒数,你将得到世界坐标中的同一点。

你称之为“图像平面”是什么?如果你计算本质的倒数,你可以将它乘以两边的左边。然后,您必须还原外部属性(是否存在
左反转?)。最后,您应该有一些公式,根据您选择的
s
给出像素到世界坐标。如果您创建了一个描述3D世界平面的公式,您可以计算撞击该平面的单个
s
。添加另一个[1]也可以,只需保留
s
。。。我想应该是
[s*u,s*v,s,1]
,但我不确定;)为什么使用外汇而不是fy?在这种情况下,你如何确定[R | T]是可逆的?