在前面我们学习了怎么样进行相机校准,在这个过程中会发现相机矩阵、畸变系数等等。如果给定一个模式图像,我们可以利用上面的信息来计算它的姿态,或者物体在空间中的位置状态,比如它是如何旋转的,它是如何移位的等等。对于平面对象,往往认为它的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)
在这里