在OpenCV中查找像素的世界空间坐标
我需要使用OpenCV找到像素的世界坐标。所以当我在我的图像中取像素(0,0)(即左上角)时,我想知道这个像素对应于我的图像平面上的3D世界空间坐标。我知道一个像素对应于世界空间中的一行3D点,但我想要一个位于图像平面本身的特定像素 这是OpenCV针孔模型的公式,我有第一个(内部)和第二个(外部)矩阵。我知道我有u和v,但我不知道如何从这个u和v到正确的X,Y和Z坐标 我已经尝试过的:在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。然后我将内部变量与
- 我想把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轴向下
最后,将其乘以世界到相机坐标变换[R | t]的倒数,你将得到世界坐标中的同一点。你称之为“图像平面”是什么?如果你计算本质的倒数,你可以将它乘以两边的左边。然后,您必须还原外部属性(是否存在
左反转?)。最后,您应该有一些公式,根据您选择的s
给出像素到世界坐标。如果您创建了一个描述3D世界平面的公式,您可以计算撞击该平面的单个s
。添加另一个[1]也可以,只需保留s
。。。我想应该是[s*u,s*v,s,1]
,但我不确定;)为什么使用外汇而不是fy?在这种情况下,你如何确定[R | T]是可逆的?