如何解决2D 像素坐标到 3D 世界坐标使用 opencv solvePnP
我看到很多类似的问题,但不是这个。
我知道:
- 像素坐标 (u,v) 和深度 (d) - 4 点
- 对应的世界坐标 (x,y,z) - 4 点
- 相机的内在矩阵K(我还没有校准,但使用了相机的默认矩阵)
- 外在矩阵 [R|t](我称其为 4x4 版本 M_ext)
- 从世界坐标点X(3D)到像素坐标点p(2D)的转换
我不知道:
- 从像素坐标点p(2D)+深度d到世界坐标点X(3D) 的转换
0。获取外部矩阵:
为了得到外在矩阵,我使用了 opencvs 函数 solvePnP:
ret,rvec,tvec = cv.solvePnP(world_points,img_points,K,np.float32([]),cv.soLVEPNP_IPPE)
我使用上面的旋转和平移向量 ( Rt = np.hstack((cv.Rodrigues(rvec)[0],tvec))
) 得到外在矩阵 [R|t]。
我想应用这两个转换来验证我的外在矩阵是正确的。
1.世界坐标指向像素坐标:
camera_coordinates = K * M_ext * world_coordinates
u = camera_coordinates[0] / camera_coordinates[2]
v = camera_coordinates[1] / camera_coordinates[2]
这个转换有效,我的像素坐标u、v是正确的。
2.像素坐标 + 深度到世界坐标点:
camera_coordinates = ( inv(K) * [u,v,1] ) * d
world_coordinates = inv(M_ext) * [camera_coordinates,1]
这种逆转换不会产生我的世界坐标点。有没有人看到我的错误在哪里?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。