我正在尝试计算通过相机图像平面上像素的光线的矢量。
我校准了我的相机。设置我将中心定义为 (0,0,0) 的棋盘并使用 cv2.solvePnP()。使用 cv2.solvePnP 中的 rvec 和 tvec,我可以通过以下代码计算世界坐标中的相机位置。
_, rvecs, tvecs, _ = cv.solvePnPRansac(objp, corners2, new_mtx, dist)
np_rodrigues = np.asarray(rvecs1[:,:],np.float64)
rmat1 = cv.Rodrigues(np_rodrigues)[0]
camera_position1 = -np.matrix(rmat1).T @ np.matrix(tvecs1)
solvePnP() 的文档 (https://docs.opencv.org/4.x/d5/d1f/calib3d_solvePnP.html) 引用了下面的等式。我一直在尝试将其反转以解决世界坐标但没有取得多大成功。在这里进行更多研究后,很多帖子都说这是不可能的,因为像素不会映射到特定的 X、Y、Z 坐标,但它会映射到光线,这正是我需要的找到。
对于它的价值,我想出了一个非常丑陋的解决方案,使用 FOV 和图像大小来获取沿图像的 x 和 y 轴的角度,我用它来确定矢量,但我知道这是行不通的由于许多原因非常准确。
必须有一种方法可以使用我拥有的信息来做到这一点!对吧?