QQ登录

只需一步,快速开始

2.2 halcon 上位机实现一维码识别

[ 复制链接 ]
对于 一维码识别过程,一般为
图像 采集,图像 预处理,一维码定位,一维码解码识别,识别结果显示。
在halcon中会多几个环节,具体过程为
1图像采集,2 条码定位,3.创建 条码模型,4.参数 设置,5 条码解码 识别。6 识别 结果显示。

下面为具体条码识别实例与注释

2.2 halcon 上位机实现一维码识别

2.2 halcon 上位机实现一维码识别

*create_bar_code_model,是一维码识别 中一个重要函数,也就是创建 条码模型的函数。
*用于创建 条码阅读器类型。第一,二参数分别为通用参数名,通用参数值。
*第三个是一维模型的句柄,后续供其他函数他用。
create_bar_code_model ([], [], BarCodeHandle)
dev_close_window ()
dev_open_window (0, 0, 120, 300, 'black', WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (3)
Colors := ['forest green','magenta']
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
for I := 1 to 6 by 1
    *读取图片保存到变量Image,第二参数为图片路径,(I$'.2')根据变量I值进行格式化
    *如I==1,则(I$'.2')格式代为01,2表示格式化结果字符宽度为2,不够两位,左补0
    read_image (Image, 'barcode/code39/code39' + (I$'.2'))
    dev_resize_window_fit_image (Image, 0, 0, -1, -1)
    *第一个参数是条形 码模型的句柄 ,第二为要设置参数的名称。第三参数为要设置参数的值。
    *其实也就是设置一些检测要求,element_size_max表示条码的最大尺寸,这里设置6,单位像素 。
    *条码最大尺寸指条码内每个黑色/白色矩形条沿着扫描 方向 的最大宽度。
    *此函数的第二参数有很多选项值,帮助手册有很详细的介绍。当月要设置多个参数 时,这个函数
    *需要 多次调用 。总之这个函数 就是设置要检测 条码的方式。
    set_bar_code_param (BarCodeHandle, 'element_size_max', 6)
    *在图像中寻找 条码并进行识别,些函数 是条形码识别的核心函数。
    *Image为输入被检测的图像, SymbolRegions为成功解码后,条码对应的区域,
    *BarCodeHandle为前面创建的条码句柄, 'Code 39'为条码的类型,条码为分很多种类型,
    *前面帖子有介绍过,如果不知道条码类型,可以选择auto,让halcon自动识别。
    *halcon支持的条码类型挺多,例如 '2/5 Industrial', '2/5 Interleaved', 'Codabar', 'Code 128',
    *'Code 39', 'Code 93',更多查阅手册介绍。DecodedDataStrings为提取的结果字符器,为数组形式。
    *因为一幅图上可能有多个条码,每个数组元素对应一个条码结果字符串。
    find_bar_code (Image, SymbolRegions, BarCodeHandle, 'Code 39', DecodedDataStrings)
    dev_display (Image)
    dev_display (SymbolRegions)
    *此函数用于获取条码识别过程中的一些中间值,用于得到可能是条形码的区域。
    *BarCodeObjects为函数 输出参数,为一个候选区域,
    *也就是得到可能是条形 码的区域 对象 ,BarCodeHandle为前面创建的条码句柄 。
    *all表示 选取所有候选区域,'symbol_regions'表示正确的条形码区域 名字
    get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'symbol_regions')
    *此函数用于获取条码指定的某种识别结果,如decoded_strings表示获得要获取解码的字符串,
    *将返回的结果保存到BarCodeResults
    get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', BarCodeResults)
    for J := 0 to |DecodedDataStrings| - 1 by 1
        dev_set_color (Colors[J])
        select_obj (BarCodeObjects, ObjectSelected, J + 1)
        dev_display (ObjectSelected)
    endfor
    disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, Colors, 'true')
    if (I < 6)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor
clear_bar_code_model (BarCodeHandle)

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索