计算由像素坐标确定的射线向量

问题描述 投票:0回答:0

我正在尝试计算通过相机图像平面上像素的光线的矢量。

我校准了我的相机。设置我将中心定义为 (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 轴的角度,我用它来确定矢量,但我知道这是行不通的由于许多原因非常准确。

必须有一种方法可以使用我拥有的信息来做到这一点!对吧?

python opencv camera linear-algebra ray
© www.soinside.com 2019 - 2024. All rights reserved.