基于Halcon学习的一维码识别【二十六】inspect_scanlines.hdev

这个程序演示了条形码扫描线的可视化。这种可视化可用于检查图像质量,其中遮挡或打印缺陷可能会阻止条形码阅读器成功解码底层条形码。
使用“扫描线_all”条形码阅读器可以读取的所有扫描线,最终用于解码候选条形码(此处为红色)。使用“扫描线_valid”可以可视化所有可以解码的扫描线,还有(这里用绿色表示)


总代码:

dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
* 
Files := ['ean1314','ean1313','ean13_defect_05']
Color := ['magenta','red','green','yellow']
* 

*创建条形码阅读器
create_bar_code_model ([], [], BarCodeHandle)
*将持久模式下的模型设置为1,使其在条形码解码期间存储一些中间结果。
set_bar_code_param (BarCodeHandle, 'persistence', 1)
* 
for I := 0 to |Files| - 1 by 1
    Filename := 'barcode/ean13/' + Files[I]
    *读取图片
    read_image (Image, Filename)
    get_image_size (Image, Width, Height)
    dev_set_window_extents (0, 0, Width, Height)
    dev_display (Image)
    
    * 寻找二维码
    find_bar_code (Image, SymbolRegions, BarCodeHandle, 'EAN-13', DecodedDataStrings)
    * Display only scanlines of the decoded candidate region.
    *仅显示解码候选区域的扫描线
    if (|DecodedDataStrings|)
        CandidateIds := [0:|DecodedDataStrings| - 1]
    else
        CandidateIds := 'all'
    endif
    * 得到中间结果
    get_bar_code_object (Candidates, BarCodeHandle, CandidateIds, 'candidate_regions')
    dev_set_line_width (4)
    dev_set_color (Color[0])
    dev_display (Candidates)
    * 得到所有的扫描线
    get_bar_code_object (AllScanlines, BarCodeHandle, CandidateIds, 'scanlines_all')
    dev_set_color (Color[1])
    dev_display (AllScanlines)
    * 得到有效的扫描线
    get_bar_code_object (ValidScanlines, BarCodeHandle, CandidateIds, 'scanlines_valid')
    dev_set_line_width (2)
    dev_set_color (Color[2])
    dev_display (ValidScanlines)
    * 
    get_bar_code_object (MergedScanlines, BarCodeHandle, CandidateIds, 'scanlines_merged_edges')
    dev_set_color (Color[3])
    dev_display (MergedScanlines)
    * 
    disp_message (WindowHandle, 'Decoded data string: ' + DecodedDataStrings, 'window', 12, 12, 'black', 'true')
    disp_message (WindowHandle, ['Candidate region','Extracted scanlines','Valid scanlines','Edges used for merging'], 'window', 42, 12, Color, ['black','false'])
    if (I < |Files| - 1)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor
clear_bar_code_model (BarCodeHandle)

逐段分析:

*更新窗口为off状态
dev_update_off ()
dev_close_window ()

*关闭窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')

* 定义文件以及颜色
Files := ['ean1314','ean1313','ean13_defect_05']
Color := ['magenta','red','green','yellow']
*创建条形码阅读器
create_bar_code_model ([], [], BarCodeHandle)

*将持久模式下的模型设置为1,使其在条形码解码期间存储一些中间结果。
set_bar_code_param (BarCodeHandle, 'persistence', 1)

*循环读取图片
for I := 0 to |Files| - 1 by 1
    Filename := 'barcode/ean13/' + Files[I]

    *读取图片
    read_image (Image, Filename)
    get_image_size (Image, Width, Height)
    dev_set_window_extents (0, 0, Width, Height)
    dev_display (Image)

    * 寻找二维码
    find_bar_code (Image, SymbolRegions, BarCodeHandle, 'EAN-13', DecodedDataStrings)

    *仅显示解码候选区域的扫描线
    if (|DecodedDataStrings|)
        CandidateIds := [0:|DecodedDataStrings| - 1]
    else
        CandidateIds := 'all'
    endif

    *得到中间结果--candidate_regions--候选地区
    get_bar_code_object (Candidates, BarCodeHandle, CandidateIds, 'candidate_regions')
    dev_set_line_width (4)
    dev_set_color (Color[0])
    dev_display (Candidates)

    * 得到所有的扫描线
    get_bar_code_object (AllScanlines, BarCodeHandle, CandidateIds, 'scanlines_all')

    *设置扫描线的颜色为红色
    dev_set_color (Color[1])
    dev_display (AllScanlines)

    * 得到有效的扫描线
    get_bar_code_object (ValidScanlines, BarCodeHandle, CandidateIds, 'scanlines_valid')
    dev_set_line_width (2)

    *设置扫描线的颜色为绿色
    dev_set_color (Color[2])
    dev_display (ValidScanlines)

     * 扫描线_合并_边
    get_bar_code_object (MergedScanlines, BarCodeHandle, CandidateIds, 'scanlines_merged_edges')
    dev_set_color (Color[3])
    dev_display (MergedScanlines)
   
    *显示信息
    disp_message (WindowHandle, 'Decoded data string: ' + DecodedDataStrings, 'window', 12, 12, 'black', 'true')

    *通过数组来显示信息
    disp_message (WindowHandle, ['Candidate region','Extracted scanlines','Valid scanlines','Edges used for merging'], 'window', 42, 12, Color, ['black','false'])
    if (I < |Files| - 1)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor

*释放条形码阅读器分配的内存
clear_bar_code_model (BarCodeHandle)


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值