【Halcon学习笔记】11.一维条形码检测
1.概述
条形码是由一组规则排列的条,空以及对应的字符组成的标记,“条”指的对光线反射率较低的部分,“空”指对光线反射率高的部分,这些条和空组成的数据可以表达一定的信息,能够用特定的设备识别读取,并转换成与计算机兼容的二进制/十进制信息。
条形码主要分为一维条形码和二维条形码。一维条形码只在水平方向表达信息,而在竖直方向不表达任何信息,其高度通常是为了便于阅读器对准。

1.1 一维码分类
现普遍使用的一维条形码有国际物品条形码(EAN)、产品通用条形码(UPC)、25条形码、39条形码、库得巴条形码,这些条形码的功能不用,分别适用于不同领域。

1.2 一维码结构
以EAN-13条形码为例,该条形码主要由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符、右侧空白区等组成。

2.相关算子
2.1 创建(创建一维维条形码阅读器的模型)
1)create_bar_code_model()
GenParamNames:可选参数名称
GenParamValues:可选参数设置值
BarCodeHandle:条形码模板句柄
2.2 设置/获取
1)get_bar_code_param()(设置条形码模型参数 )
2)set_bar_code_param()(获取条形码模型参数 )
BarCodeHandle:条形码模板句柄
GenParamNames:可选参数名称
check_char:是否设置校验符
absent:不检查检验码,所有字符都作为数据返回
present:检查检验码,并用于验证条形码的正确性,如果校验和不匹配,则不返回条码结果
preserved:允许验证条形码,同时仍将校验字符保留在数据中
majority_voting:解码时是否分析多条扫描线(为了减少错误解码结果,应该启用该参数)
false:如果找到最小数目的相同解码扫描线,则返回一个成功的解码结果
true:在不同的扫描线结果之间进行选择
persistence:是否在解码期间存储一些中间结果(获取解码扫描线时需要存储中间结果)
0:不存储
1:存储
min_identical_scanlines:解码时扫描线的最小数目
contrast_min:条码元素的前景和背景之间的最小对比度(设置最小对比度可再一定程度提高后续检测时间)
meas_param_estimation:增加元素尺寸非常小的条形码的读取性能(条码较小时设置为true可以提高读取性能)
element_size_variable:补偿条形码失真(当条码有变形时设置为true可以再一定程度去补偿失真)
meas_thresh:相对于扫描线像素的动态范围的相对值
meas_thresh_abs:相对于扫描线像素的动态范围的绝对值(对比度)
num_scanlines:解码时所用扫描线的最大数目,设置为0表示自动确定,一般设置为2-30
...
GenParamValues:可选参数设置值
2.3 检测(检测和读取图像中的条形码符号)
1)find_bar_code()
Image:待处理的图片
SymbolRegions:成功解码的条码符号的区域
BarCodeHandle:条码模型的句柄
CodeType:条码类型
auto(不清楚待检测的条码类型时)
EAN-13
Code 39
...
DecodedDataStrings:解码的数据字符串
2.4 获取
1)get_bar_code_result()
(获取解读条形码标志时计算得到的结果)
BarCodeHandle:条码模型的句柄
CandidateHandle:分别指示需要数据的条码结果候选
ResultName:结果名称
decoded_types:条码类型
decoded_strings:条码字符串
element_size:元素大小
orientation:方向
decoded_data:解码数据
decoded_reference:解码参考
composite_strings:复合字符串
composite_reference:符合参考
aborted:是否被终止
...
BarCodeResults:结果值
2)get_bar_code_object()(访问在搜索或解码过程中创建的图标对象)
BarCodeObjects:在条码检测或评估期间作为中间结果创建的对象
BarCodeHandle:条码模型的句柄
CandidateHandle:分别指示需要数据的条码结果候选
ObjectName:要返回的标志性对象的名称
candidate_regions:返回潜在条形码的区域(可能是条形码的区域)
scanlines_all:返回所有扫描线的 XLD 轮廓(包括潜在条形码区域)
scanlines_all_plain:返回所有扫描线的 XLD 轮廓(包括潜在条形码区域)
scanlines_merged_edges:返回表示应用于候选区域的扫描线中特定检测到的条的 XLD 轮廓
scanlines_valid:返回特定检测到条形码扫描线的 XLD 轮廓
scanlines_valid_plain:返回特定检测到条形码扫描线的 XLD 轮廓
symbol_regions:返回成功解码符号的区域
2.5 释放(释放条形码阅读器的模型)
1)clear_bar_code_model()
BarCodeHandle:条形码模板句柄
3.一维码检测在Halcon中的应用步骤
1)创建条形码模板
2)设置条形码模型参数
3)检测和读取图像中的条形码符号
4) 获取解读条形码标志时计算得到的结果




-by Ryou2