【秣厉科技】LabVIEW工具包——OpenCV 教程(9):二维码与条形码


前言

  1. 需要下载安装OpenCV工具包的朋友,请前往 此处
  2. 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。

二维码(QRCode)

这里说的二维码,指的是我们日常生活最常用的那种二维码 - QRCode。另外还有一种叫 Aruco ,也属于二维码,将在其他教程里解说。

本文所有图片中的二维码,均作了 “模糊化” 处理,以防被 优快云 认定为违规。

1. 生成QRCode

生成 QRCode 二维码,可以使用 objdetect 模块下的 QRCodeEncoder 类,选板如图。

在这里插入图片描述

1.1 生成单一QRCode

  • 使用 QRCodeEncoder 类简单地生成一个二维码,函数调用流程为 create - encode - release;
  • create 函数可以设置二维码的 版本、纠错等级、模式等;
    (structure_number 参数仅当 mode = MODE_STRUCTURED_APPEND 时才有效)
  • 通过 encode 生成的二维码图像尺寸很小(每个编码只占1个像素),所以使用 imgproc 模块下的 resize 函数将它放大,以便观察;
    (注意,这个 resize 与 Mat 类内置的 resize 是完全不同的!)
  • 完整流程如下图:

在这里插入图片描述


1.2 生成 “结构化附加” 二维码组

当需要编码的信息,超过单个二维码所能容纳的极限时,可以考虑使用 “结构化附加” 模式。这种模式下,信息会被自动分割,生成多个二维码。

  • 在 create 的参数里,设置 mode = MODE_STRUCTURED_APPEND,并设置结构数量 structure_number;
  • 使用 encodeStructuredAppend 函数生成二维码数组,同样用 resize 放大;
  • 完整流程如下图:

在这里插入图片描述


2. 识别QRCode

识别 QRCode ,可以使用 objdetect 模块下的 QRCodeDetector 类,选板如图。
实现过程分为两步:检测(detect)与解码(decode)。为了方便快捷,OpenCV还提供二合一的函数:detectAndDecode。

在这里插入图片描述

2.1 识别单一QRCode

  • 一次简单的识别流程:new - detect - decode - delete;
  • detect 返回 isDetected 为True时,代表检测成功,points 数组将包含二维码四个角点的坐标;
  • decode 需要输入原图像和角点坐标,解码后返回字符串结果 decoded_string ;
  • 完整流程 + 可视化,如下图所示。(您还可以使用 detectAndDecode 函数,将detect与decode合二为一)

在这里插入图片描述

在这里插入图片描述


2.2 识别多个QRCode

  • 实现流程与上文类似,只不过检测与解码的函数,要换成后缀为 “Multi” 的,才能识别多个二维码;
  • 多识别模式下,points 数组将包含多个二维码的角点,相邻4个点为一组;
  • 完整流程 + 可视化,如下图所示。(本例使用二合一的 detectAndDecodeMulti 函数)

在这里插入图片描述

在这里插入图片描述


2.3 其他API

  • decodeCurved 和 detectAndDecodeCurved 用于识别曲面二维码;
  • setEpsX 和 setEpsY 可以自定义水平和垂直方向的扫描步长;
  • setUseAlignmentMarkers 使用标记物来协助定位二维码角点;

条形码(Barcode)

目前 OpenCV 没有生成 Barcode 的 API,只有识别的 API。

1. 识别Barcode

识别 Barcode ,可以使用 objdetect 模块下的 BarcodeDetector 类,选板如图。
从选板中可以看出,条形码识别的函数,几乎与二维码识别的互为孪生,用法功能也是类似的,下文不再赘述。

在这里插入图片描述

1.1 识别单一Barcode

  • 识别条形码的流程与二维码类似:new - detect - decode - delete;
  • BarcodeDetector 类的 new.vi 是个多态VI,除了默认的default外,还有with model模式可以载入自定义的模型;
  • 条形码周围需要一定的留白空间,否则可能识别失败。

在这里插入图片描述

在这里插入图片描述


1.2 识别多个Barcode

在这里插入图片描述

在这里插入图片描述

1.3 其他API

  • decodeWithType 和 detectAndDecodeWithType 可以返回条形码的类型(如 EAN_13 等),而且二者默认是 “Multi” 模式,即同时识别多个条形码。

总结

  1. 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
  2. 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
  3. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秣厉科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值