Python使用aruco实现相机标定
姿态估计在许多计算机视觉的应用中都是十分重要的环节,在机器人导航、增强现实等场景中广泛运用。这个过程主要基于找到点在真实3d环境中的坐标和2d图像中的对应坐标。这通常是一个比较困难的步骤,因此运用通用的标记物或者标准标号来使这个问题简单一点。
ArUco简介
ArUco是一个开源的微型的现实增强库,目前好像已经集成在OpenCV3.0以上的版本内了,它除了用于现实增强,还很用于实现一些机器视觉方面的应用,上图中的波士顿动力也曾用此方法用于Atlas的视觉定位,下面是两个重要的网址:
ArUco下载地址:ArUco下载(可以下载2.0.19或3.0.0)
ArUco的Marker生成网址:Marker生成(可以定制Marker的size、ID以及Padding)
ArUco开源库的几个特点如下:
1.基于C++;
2.仅依赖于OpenCV(≥2.4.9)和Eigen3(源码中已经包含);
3.BDS开源。
Demo
pip install opencv-contrib-python
才有扩展模块,扩展模块中包含aruco
1 | #!/usr/bin/env python2 |
运行结果
1 | ('i:', 1) |
错误
错误一
可能会提示
qt.qpa.plugin: Could not find the Qt platform plugin “cocoa” in “”
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
解决办法
1 | pip install opencv-python-headless |
应该是版本的问题,最新版的opencv可能少了这个。
也可以安装其他老版的opencv来解决
1 | pip install opencv-python==4.0.0.21 |
错误二
Error: Assertion failed (nimages > 0) in cv::calibrateCameraRO
原因:
① 图片路径问题,没有指向包含棋盘格的图片
② 图片中不包含棋盘格或者图片模糊等问题,导致查找棋盘格角点失败
解决方法:
① 仔细检查图片路径和棋盘格图片是否对应
② 检查棋盘格图片是否模糊,可以写个小tool显示找到角点的位置,如果发现图片有问题没有找到角点,就重新拍摄