首页 > 其他 > 详细

【Halcon示例005---bar_code_model】二维码示例

时间:2019-11-15 21:04:56      阅读:135      评论:0      收藏:0      [点我收藏+]
技术分享图片
read_image (Image0, F:/02-杨科蒙/03-Images/03-Halcon示例/二维码.jpg)
get_image_size (Image0, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width/4, Height/4, black, WindowHandle)
dev_display (Image0)
dev_set_draw (margin)
dev_set_line_width (2)

*提高解码率的设置项:
*1default_parameters, ‘‘enhanced_recognition‘‘
*2polarity, dark_on_light
*3、[module_size_min,module_size_max]
*4、挖出二维码区域,挖得越精确越好(周围最好不要有其他黑色像素块干扰),这一部分我现在只是粗略挖了一下
*5、增强图像对比度,我设计的函数enhanced_contrast (将图像色阶从0-255重新映射到Min到Max之间)

*【核心算子一】创建二维码句柄
* create_data_code_2d_model (QR Code, default_parameters, enhanced_recognition, DataCodeHandleQR) 
create_data_code_2d_model (QR Code, [], [], DataCodeHandleQR) 

*设置解码时的参数
*‘standard_recognition’、‘enhanced_recognition’、‘maximum_recognition’
set_data_code_2d_param (DataCodeHandleQR, default_parameters, enhanced_recognition)
*延迟时间,超过这个时间还没找到就不找了
set_data_code_2d_param (DataCodeHandleQR, timeout, 200)
*极性,可设置dark_on_light(白色背景黑码)或者light_on_dark
set_data_code_2d_param (DataCodeHandleQR, polarity, dark_on_light)
* 码粒个数设置(有几种二维码设置这个参数非法)
* set_data_code_2d_param(DataCodeHandleQR,symbol_size_max, 11)
* set_data_code_2d_param(DataCodeHandleQR,symbol_size_max, 31)

count := 0
dev_set_line_width (3)
dev_set_draw(margin)

list_files (二维码, [files,follow_links,recursive], ImageFiles)
tuple_regexp_select (ImageFiles, [\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$,ignore_case], ImageFiles)
for i:= 0 to |ImageFiles|-1 by 1       
    read_image(Image,ImageFiles[i])  
    
    *挖出条码区域,提高解码率和解码速度
    gen_rectangle1 (Rectangle, 50, 100, 560, 700)  
    reduce_domain (Image, Rectangle, ImageReduced)
*     crop_domain (ImageReduced, ImagePart)
    
    *增强图像对比度(后文有该函数说明)
    enhanced_contrast (ImageReduced, Image2, 40, 180)
   
    * 码粒像素设置,码粒大小指的二维码中矩形颗粒的宽度
    set_data_code_2d_param(DataCodeHandleQR, [module_size_min,module_size_max], [12,40])
    
    *【核心算子二】查找二维码
    *如果GenParamNames, GenParamValues不填,那么默认只找一个二维码,将stop_after_result_num设置为3指最多找3个
*     find_data_code_2d (Image2, SymbolXLDs, DataCodeHandleQR, [], [], ResultHandles, DecodedDataStrings)
    find_data_code_2d (Image2, SymbolXLDs, DataCodeHandleQR, stop_after_result_num, 3, ResultHandles, DecodedDataStrings)

    tuple_length (DecodedDataStrings, Length)
    
    *找不到的话,改一下参数再找一遍
    if (Length == 0)
        set_data_code_2d_param (DataCodeHandleQR, [module_size_min,module_size_max], [20,40])
        find_data_code_2d (Image2, SymbolXLDs, DataCodeHandleQR, [], [], ResultHandles, DecodedDataStrings)
    endif
    
    tuple_length (DecodedDataStrings, Length)
    if (Length > 0 )
        count := count + 1
    endif
    
    *获得解码后的一些结果
    get_data_code_2d_results (DataCodeHandleQR, all_candidates, quality_isoiec15415_labels, ResultValues)
    *获取解码时的参数(如果没有设置过,则获得的是默认值)
    get_data_code_2d_param (DataCodeHandleQR, polarity, GenParamValues)
    dev_display (Image)
    dev_display(SymbolXLDs)
    disp_message (WindowHandle, 解码结果: + DecodedDataStrings, image, 20, 50, black, true)
    disp_message (WindowHandle, 解码成功率: + count + / +|ImageFiles| , image, 20, 860, black, true)
*      stop ()
endfor
二维码识别的一般步骤
技术分享图片
Mult := 255.0 / (Max - Min)
Add := -Mult * Min
scale_image (Image, Image2, Mult, Add)
return ()
enhanced_contrast

技术分享图片

转自https://www.cnblogs.com/xh6300/p/10492110.html

【Halcon示例005---bar_code_model】二维码示例

原文:https://www.cnblogs.com/yangmengke2018/p/11869026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!