让我们写一点代码来检测在一幅图像中的棋盘格,并获取他到摄像机的距离. 你可以使用同样的方法来针对任何已知三维几何结构的物体,这个物体可以在一幅图像中被检测到.
创建一个空的控制台项目. 载入一幅图片:使用 findChessboard 函数来检测图片中的棋盘.现在, 定义一个容器vector<Point3f>变量,这个数组可以存放在任何坐标系统下的棋盘格三维坐标. 为简便起见, 让我们选择一个棋盘一角在原点并且棋盘在平面z = 0上的系统.从 XML/YAML 文件中读取摄像机参数:现在我们通过执行函数solvePnP可以找到棋盘姿势了:计算重投影误差,参照例子calibration(请看opencv/samples/cpp/calibration.cpp, 函数computeReprojectionErrors).