文章目录
前言
- 需要下载安装OpenCV工具包的朋友,请前往 此处 ;
- 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。
Aruco 二维码
Aruco ,是一种用二进制编码生成的正方形黑白图案。其存储的内容不多,仅一个ID号,通常作为应用场景中的标志点。Aruco 在增强现实(AR)、机器人导航、相机校准、物体跟踪等方面具有较广泛的应用。
OpenCV 工具包中,objdetect 模块下的子目录 aruco 专门用于生成和识别 Aruco 二维码。
1. 生成 Aruco
1.1 生成孤立 Aruco
aruco::Dictionary 这个类的作用,是定义一套 “编码字典” ,作为后续生成和识别 Aruco 码的基准。同时,它也带有生成图像的 API,可以生成一个简单的 Aruco 码。
- 使用预设的 “编码字典” 生成一个单独的 Aruco 码,流程如下:
1.2 生成 Aruco Borad
多个 Aruco 按照一定规则排列在一起,就组成了 Aruco Board。
使用 board 子目录下的 API 实现 Aruco Board 的生成。一共有三种 borad 类: Borad,CharucoBoard,GridBoard。
- Board 类几乎没有规则,可以在任意位置生成任意大小的 Aruco 码,组合成一个 Aruco Board;
- Board::new 方法,以输入的 Dictionary 作为 “编码字典”,分别在objPoints指定的位置生成代表 ids 的Aruco码;
- 注意,Dictionary 对象不能提前销毁(要在使用Dictionary作为输入的其他对象之后销毁),下同。
- CharucoBoard 类生成的图案类似 “棋盘格”,黑块与 Aruco 码交错排列。
- GridBorad 类生成的是均匀排列的网格,每一块都是一个 Aruco 码。
2. 识别 Aruco
2.1 识别一个或多个 Aruco 码
- 生成一个 Aruco 码,并使用 ArucoDetector 类来识别,如下图。
- copyMakeBorder 这个函数位于 core 选板,作用是在图像周围填充一层边框。由于被识别的 Aruco 码外围必须有一些留白作为背景,否则会识别失败,所以这里使用copyMakeBorder来扩充白色边界。
- 同样,Dictionary 不能在 ArucoDetector 之前销毁。
- 如下图,ArucoDetector::new 方法还可以设置识别参数:DetectorParameters 和 RefineParameters,如不连接则使用默认参数;
- DetectorParameters 和 RefineParameters 也是两个类,虽然选板中它们只有一个new和一个delete,但其实大量参数设置隐藏在“属性节点”中。
- 识别多个 Aruco 码,同样使用 ArucoDetector 类。下图生成一个 GridBoard 图片,然后用 ArucoDetector 识别。
- 可视化过程,使用 aruco 选板下的 drawDetectedMarkers 更方便。绘图之前使用 cvtColor 将原本的单通道图像变成3通道,以便能绘制出有颜色的标记。
2.2 识别 CharucoBorad 规则的 Aruco 组合
- 使用 CharucoBoard 生成 “棋盘格”,再用 CharucoDetector 进行识别,如下图;
- CharucoDetector::new 方法可以设置参数:CharucoParameters,DetectorParameters 和 RefineParameters,如不连接则使用默认参数;
- 可视化过程,使用 aruco 选板下的 drawDetectedCornersCharuco 更方便。绘图之前使用 cvtColor 将原本的单通道图像变成3通道,以便能绘制出有颜色的标记。
总结
- 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
- 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
- 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。