我使用OpenCV的cv2立体校准校准了一对相机,其中一个是飞行时间相机。因此,我有本征校准参数和基本/基本矩阵。
现在,我想将一个点从ToF相机投影到2D相机。
为了在ToF摄像头中将图像转换为世界坐标,我这样做了:
p = [(15, 15, 1)]
z = depth[p[0][0], p[0][1]] # measured ToF depth for this single point
# from ToF image coordinates (including ToF depth!) to ToF world coordinates
invR_x_invM_x_uv1 = R_inv * cameraMatrix_inv_3 * p[0]
invR_x_tvec = R_inv * T
wcPoint = (z + invR_x_tvec[2]) / invR_x_invM_x_uv1[2] * invR_x_invM_x_uv1 - invR_x_tvec
wcPoint = wcPoint[:, -1]所以我得到了世界坐标中的点。
我不明白的是,(1)如何将这个点转换到第二个相机的世界坐标系,然后(2)如何将这个点投影到第二个相机的图像坐标。谁能给我指出一个特别针对(1)的OpenCV函数?
发布于 2021-07-07 16:26:37
首先,你应该学习线性代数。你不能对矩阵进行元素乘法。你必须使用点积。在Python语言中,两个矩阵A和B的点积要么写成A@B,要么写成A.dot(B)。
如果你有一个立体校准和两个固定的相机,你也应该有这些相机的外部参数。这些相机和世界坐标系(只有一个)之间的平移和旋转(可能位于提到的相机之一的位置)使您能够转换3D数据,以获得所选坐标系中的坐标。我强烈建议你阅读Hartley/Zisserman中关于相机投影的基础知识,Multiple View Geometry,在线免费提供。
https://stackoverflow.com/questions/68192167
复制相似问题