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等函数实现高效识别,结合等级检测可确保条码在实际场景中的可靠性。

相关推荐
NAGNIP4 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab5 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab5 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP9 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年9 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼9 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS10 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区11 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈11 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang11 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx