在OpenCV里使用姿态估算

在前面我们学习了怎么样进行相机校准,在这个过程中会发现相机矩阵、畸变系数等等。如果给定一个模式图像,我们可以利用上面的信息来计算它的姿态,或者物体在空间中的位置状态,比如它是如何旋转的,它是如何移位的等等。对于平面对象,往往认为它的Z轴是等于0的,所以现在我们怎么样才能通过平面图像来推导出来相机放在什么位置拍出这样的照片。如果根据图像上找到的信息,能知道这个物体怎么样在空间里摆放的,那么就可以从一个二维的图像来重构它的三维图像的效果显示。让我们接着下来看看怎么样做到这件事情的。

 

我们现在的问题就变成了怎么样在棋盘的图像画出一个三维坐标系,由(X,Y,Z)三个坐标轴组成。X轴用蓝色表示,Y轴用绿色表示,Z轴用红色表示,另外Z轴从效果上看起来应该是感觉它是垂直于棋盘平面的。首先,从前面校准结果得到相机矩阵和畸变系数。接着下来用下面的代码在棋盘上画一个三维坐标轴,坐标轴的原点由cv2.findChessboardCorners函数找到,坐标轴的长度由自己定义如下:

axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3)

在这里定义坐标轴的长度为3,X轴是从(0,0,0)到(3,0,0),Y轴是从(0,0,0)到(0,3,0),而Z轴是从(0,0,0)到(0,0,-3),这里使用负数是表示Z轴是朝向相机方向。接着下来通过函数cv2.solvePnP从三维到二维点对应中查找对象姿势,即时找到旋转向量和平移向量。这时候就可以使用投影矩阵把三维坐标里的点投影到平面里,最后从角点坐标画线到投影后的轴坐标点。

可以用下在的例子来演示:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.n

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览

应支付9.90元
点击重新获取
扫码支付

支付成功即可阅读