基于Halcon学习的一维码识别【三十】defect_barcode.hdev

这个示例程序显示了条形码阅读器读取缺陷条形码的能力密码。这是通过人工移除条形码中不同程度的空格来实现的。该空间只是用一个对应于周围条形的灰色值进行了叠加。


总代码:

dev_update_pc ('off')
dev_update_window ('off')
dev_update_var ('off')

*读取图片
read_image (Image, 'barcode/code39/code3904')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_color ('green')
dev_display (Image)
set_display_font (WindowHandle, 14, 'mono', 'false', 'false')
create_bar_code_model ([], [], BarCodeHandle)
for O := 5 to 24 by 5
    for R := 79 to 141 by 5
        *生成一个矩形
        gen_rectangle1 (Rectangle, max([R - O,79]), 170, min([R + O,141]), 173)
        *改变区域的灰度值,将区域绘制到图像中
        paint_region (Rectangle, Image, ImageError, 6, 'fill')
        *设置黑白条的最大像素为32
        set_bar_code_param (BarCodeHandle, 'element_size_max', 32)
        *寻找条形码
        find_bar_code (ImageError, SymbolRegions, BarCodeHandle, 'Code 39', DecodedDataStrings)
        *得到候选区域
        get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
        dev_display (ImageError)
        dev_display (SymbolRegions)
        if (|DecodedDataStrings| > 0)
            disp_message (WindowHandle, DecodedDataStrings, 'image', 20, 10, 'black', 'true')
        else
            disp_message (WindowHandle, 'Undecodable', 'image', 20, 10, 'black', 'true')
            disp_continue_message (WindowHandle, 'black', 'true')
            stop ()
        endif
        wait_seconds (0.2)
    endfor
endfor
clear_bar_code_model (BarCodeHandle)

逐段分析:

*定义pc、窗口以及变量更新为off状态
dev_update_pc ('off')
dev_update_window ('off')
dev_update_var ('off')

*读取图片
read_image (Image, 'barcode/code39/code3904')
get_image_size (Image, Width, Height)
dev_close_window ()

*打开窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_color ('green')
dev_display (Image)
set_display_font (WindowHandle, 14, 'mono', 'false', 'false')

*创建条形码模型句柄
create_bar_code_model ([], [], BarCodeHandle)

*矩形的宽度增加
for O := 5 to 24 by 5
    *小矩形的列坐标
    for R := 79 to 141 by 5
        *生成一个矩形
        gen_rectangle1 (Rectangle, max([R - O,79]), 170, min([R + O,141]), 173)

        *改变区域的灰度值,将区域绘制到图像中
        *使得小矩形成为黑色
        paint_region (Rectangle, Image, ImageError, 6, 'fill')

        *设置黑白条的最大像素为32
        set_bar_code_param (BarCodeHandle, 'element_size_max', 32)

        *寻找条形码
        find_bar_code (ImageError, SymbolRegions, BarCodeHandle, 'Code 39', DecodedDataStrings)

     *得到候选区域
        get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'candidate_regions')
        dev_display (ImageError)
        dev_display (SymbolRegions)

        if (|DecodedDataStrings| > 0)
            *显示解码后的结果
            disp_message (WindowHandle, DecodedDataStrings, 'image', 20, 10, 'black', 'true')
        else
            *显示不能解码
            disp_message (WindowHandle, 'Undecodable', 'image', 20, 10, 'black', 'true')
            disp_continue_message (WindowHandle, 'black', 'true')
            stop ()
        endif
        wait_seconds (0.2)
    endfor
endfor

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


主要算子解释:

paint_region(Region, Image : ImageResult : Grayval, Type : )

功能:改变区域的灰度值,将区域绘制到图像中。将区域中给定的区域以恒定的灰度值绘制到图像中给定的图像中,并在ImageResult中返回结果。

Region:要绘制到输入图像中的区域。

Image:要在其中绘制区域的图像。

ImageResult:包含结果的图像。

Grayval:区域所需的灰度值。

Type绘制填充区域或作为边界。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值