Halcon条码技术详解(含 Halcon 应用示例)

条码技术详解(含 Halcon 应用示例)

一、一维码(线性条码)

1. 定义

一维码是由规则排列的 (低反射率部分)和(高反射率部分)组成的标记,通过条空组合表达信息,可被设备识读并转换为计算机兼容的二进制 / 十进制数据。

2. 常见码制及应用场景

码制 特点及应用 示例场景
EAN 码 国际通用商品条码,分 EAN-13(13 位,标准版)和 EAN-8(8 位,缩短版),我国通用商品条码与其等效。 超市商品包装、零售商品
UPC 码 美国统一代码委员会制定,分 UPC-A(12 位)和 UPC-E(6 位),主要用于美加地区。 美国进口商品、北美零售市场
39 码 可表示数字、字母及特殊字符,应用广泛,适用于工业、图书、票证管理。 物流标签、工业零部件追溯
Code 93 码 字符集与 39 码相同,密度更高,适用于空间有限的场景。 小型包装、电子元件标签
库德巴码(Codabar) 支持数字和字母,主要用于医疗卫生、图书情报、物资管理。 医院病历管理、图书馆借阅标签
Code 128 码 可表示 ASCII 0-127 全字符集,密度高、容错性强,应用灵活。 物流面单、生产流水线追溯
ITF 25 码(交叉 25 码) 仅表示数字,条空均含信息,字符数为偶数(奇数需补 0),适用于包装行业。 瓦楞纸箱、包装物流标签
Industrial 25 码 仅表示数字,条含信息、空为分隔符,结构简单。 仓储托盘标识、工业零件编号
Matrix 25 码 仅表示数字,结合 ITF25 的起止符可生成中国邮政码。 邮政包裹、信件分拣

3. 组成结构

一维码的标准结构(从左到右):

复制代码
静区(前) → 起始符 → 数据符 → [中间分割符(如EAN码)] → [校验符] → 终止符 → 静区(后)
  • 静区:条码两端的空白区域,确保阅读器正确识别起始 / 终止,宽度通常≥6mm(或 10 倍模块宽度)。

  • 起始 / 终止符:标志条码的开始和结束,包含码制识别和阅读方向信息。

  • 数据符:核心信息区域,由条空组合表示具体数据。

  • 模块:条码中最窄的条或空,是构成条码的基本单位(单位:mm 或 mil)。

二、二维码

1. 定义

二维码(2-dimensional bar code)是通过平面(二维方向)上黑白相间的几何图形按规律分布记录信息的符号,基于二进制 "0""1" 逻辑,可被扫描设备自动识读,支持多行信息识别和旋转处理,具备字符集特定、校验功能等特性。

2. 常见码制及应用

码制 特点及应用 示例场景
QR Code 应用最广泛,容错能力强(7%~30%),支持中文、图片等,可快速识读。 支付码、名片、产品溯源
Data Matrix 高密度,最小可打印在 1mm² 内,适用于小尺寸物品(如电子元件)。 芯片标识、医疗器械标签
PDF417 多行堆叠式,信息容量大(可存 1850 个字符),适用于证件类。 身份证、护照、登机牌
Aztec Code 无静区,识别速度快,适用于移动设备扫描。 门票、电子优惠券
MaxiCode 圆形结构,专为物流设计,支持快速分拣。 联邦快递、UPS 包裹追踪

三、条码 / 二维码等级

条码等级是衡量识读性能的标准,由国际标准 ISO/IEC 15416(一维码)和 ISO/IEC 15415(二维码)规定,通常分为A、B、C、D、F五级:

  • A 级:最优,可被所有设备快速识读,适用于高速扫描场景(如生产线)。

  • B 级:良好,大部分设备可识读,适用于普通零售。

  • C 级:一般,需调整扫描设备参数才能识读,适用于低速度场景。

  • D 级:较差,识读困难,可能需要多次尝试。

  • F 级:不合格,无法被标准设备识读。

四、Halcon 条码处理示例

Halcon 提供了完整的条码识别库,支持一维码和二维码的读取、定位及等级检测。

1. 一维码识别(以 EAN-13 为例)

复制代码
read_image (Image, 'ean13_label.png')  // 读取含EAN-13码的图像
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
​
// 预处理:转为灰度图(若为彩色)
rgb1_to_gray (Image, GrayImage)
​
// 识别一维码(自动识别码制)
read_bar_code (GrayImage, BarCodeStrings, 'auto', DecodedDataHandles)
​
// 输出结果
if (|BarCodeStrings| > 0)
    disp_message (WindowHandle, '识别结果: ' + BarCodeStrings, 'window', 10, 10, 'green', 'true')
else
    disp_message (WindowHandle, '未识别到条码', 'window', 10, 10, 'red', 'true')
endif
​
// 释放资源
clear_bar_code_data (DecodedDataHandles)

2. 二维码识别(以 QR Code 为例)

复制代码
read_image (Image, 'qr_code.png')  // 读取含QR码的图像
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
​
// 预处理:增强对比度(可选)
emphasize (Image, ImageEmphasize, 1, 1, 1)
​
// 识别二维码(指定QR Code码制)
find_qr_code (ImageEmphasize, QRCodeModelID, QRCodeResultID, 'all', 0, 0, ResultHandles, DecodedData)
​
// 输出结果及定位
if (|DecodedData| > 0)
    disp_message (WindowHandle, 'QR码内容: ' + DecodedData, 'window', 10, 10, 'green', 'true')
    // 绘制二维码边框
    get_qr_code_result (ResultHandles, 'contour', Contours)
    dev_set_color ('red')
    dev_display (Contours)
else
    disp_message (WindowHandle, '未识别到QR码', 'window', 10, 10, 'red', 'true')
endif
​
// 释放资源
clear_qr_code_result (ResultHandles)
clear_qr_code_model (QRCodeModelID)

3. 条码等级检测(以 Code 128 为例)

复制代码
read_image (Image, 'code128_quality.png')
gray_image (Image, GrayImage)
​
// 创建条码等级检测模型
create_bar_code_quality_model (BarCodeQualityModelID)
​
// 检测条码等级
inspect_bar_code_quality (GrayImage, BarCodeQualityModelID, 'code128', 0, 0, QualityResults, DecodedData)
​
// 输出等级结果
get_bar_code_quality_result (QualityResults, 'grade', Grade)
disp_message (WindowHandle, '条码等级: ' + Grade, 'window', 10, 10, 'blue', 'true')
​
// 释放模型
clear_bar_code_quality_model (BarCodeQualityModelID)

总结

一维码适用于简单信息(如商品编号),二维码支持大容量、多类型信息(如图文、网址)。Halcon 通过read_bar_codefind_qr_code等函数实现高效识别,结合等级检测可确保条码在实际场景中的可靠性。

相关推荐
延凡科技1 小时前
无人机低空智能巡飞巡检平台:全域感知与智能决策的低空作业中枢
大数据·人工智能·科技·安全·无人机·能源
2501_941329721 小时前
YOLOv8-SEAMHead改进实战:书籍检测与识别系统优化方案
人工智能·yolo·目标跟踪
晓翔仔2 小时前
【深度实战】Agentic AI 安全攻防指南:基于 CSA 红队测试手册的 12 类风险完整解析
人工智能·安全·ai·ai安全
百家方案3 小时前
2026年数据治理整体解决方案 - 全1066页下载
大数据·人工智能·数据治理
北京耐用通信3 小时前
工业自动化中耐达讯自动化Profibus光纤链路模块连接RFID读写器的应用
人工智能·科技·物联网·自动化·信息与通信
TracyCoder1234 小时前
LeetCode Hot100(15/100)——54. 螺旋矩阵
算法·leetcode·矩阵
zhangkaixuan4564 小时前
Paimon 读取数据流程深度解析
大数据·hadoop·flink·apache·paimon
小韩博4 小时前
一篇文章讲清AI核心概念之(LLM、Agent、MCP、Skills) -- 从解决问题的角度来说明
人工智能
u0109272715 小时前
C++中的策略模式变体
开发语言·c++·算法
清平乐的技术专栏5 小时前
HBase集群连接方式
大数据·数据库·hbase