【发布时间】:2013-09-09 08:33:47
【问题描述】:
我有一个校准过的相机(固有矩阵和失真系数),我想知道相机位置,知道图像中的一些 3d 点及其对应点(2d 点)。
我知道cv::solvePnP 可以帮助我,在阅读了this 和this 之后,我了解到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++),但这对我来说没有多大意义:
- solvePnP 的 rvec、tvec 输出是 3x1 矩阵,3 个元素向量
- cv2.Rodrigues(rvec) 是一个 3x3 矩阵
- cv2.Rodrigues(rvec)[0] 是一个 3x1 矩阵,3 个元素向量
- cameraPosition 是一个 3x1 * 1x3 矩阵乘法,它是一个.. 3x3 矩阵。如何通过简单的
glTranslatef和glRotate调用在opengl 中使用它?
【问题讨论】:
标签: c++ opengl opencv computer-vision pose-estimation