我有一个校准的相机(固有矩阵和失真系数),我想知道相机位置,知道图像中的一些 3d 点及其对应点(2d 点)。
我知道这cv::solvePnP
对我有帮助,在阅读了这个和这个之后,我明白我是solvePnP的输出,rvec
是tvec
相机坐标系中物体的旋转和平移。
所以我需要找出世界坐标系中的相机旋转/平移。
从上面的链接看来,python 中的代码很简单:
found,rvec,tvec = cv2.solvePnP(object_3d_points, object_2d_points, camera_matrix, dist_coefs)
rotM = cv2.Rodrigues(rvec)[0]
cameraPosition = -np.matrix(rotM).T * np.matrix(tvec)
我不知道 python/numpy 的东西(我正在使用 C++),但这对我来说没有多大意义:
- rvec,solvePnP 的 tvec 输出是 3x1 矩阵,3 个元素向量
- cv2.Rodrigues(rvec) 是一个 3x3 矩阵
- cv2.Rodrigues(rvec)[0] 是一个 3x1 矩阵,3 个元素向量
- cameraPosition 是一个 3x1 * 1x3 矩阵乘法,它是一个.. 3x3 矩阵。如何在 opengl 中通过简单的
glTranslatef
和glRotate
调用来使用它?