欢迎光临散文网 会员登陆 & 注册

【Halcon学习笔记】11.一维条形码检测

2022-07-26 18:28 作者:Ryou2  | 我要投稿

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








【Halcon学习笔记】11.一维条形码检测的评论 (共 条)

分享到微博请遵守国家法律