我想使用opencv从像素/屏幕坐标找到相机坐标 .
假设我的相机已校准,我使用opencv获得内在参数(具有焦距和主点的矩阵)和外部参数(旋转和平移矩阵) . 然后使用opencv进行3d重建的this website说:
s * [q 1]^{Transpose} = [K] * [([R] * P) + T]
其中 [q]
是2d像素坐标, s = 1
, K
是( 3x3
)内在矩阵, R
是( 3x3
)旋转矩阵, P
是( 3x1
)世界坐标, T
是( 3x1
)平移矩阵 .
所以:
[R]^{-1} * ( [ [K]^{-1} * [q 1 ]^{Transpose} ] - [T] ) = [P]
然后:
[U] = ([R] * [P]) + [T]
其中 [U]
是相机坐标中的( 3x1
) . 所以现在以像素坐标为单位的 [q]
将转换为摄像机坐标 [U]
.
我是否正确将像素坐标转换为相机坐标?旋转矩阵( [R]
)或内在矩阵( [K]
)是否总是可逆的?或者有时旋转矩阵和/或内在矩阵不能反转?
是否有可能确认这一点?
1 回答
我太懒了,不能为你检查(实际上,你应该测试它,如果你有问题,请到这里寻求帮助) .
但你可以使用这个漂亮的代码片段:它不是你想要的,但基本原理是正确的:
Opencv virtually camera rotating/translating for bird's eye view