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

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)

*提高解码率的设置项:
*1'default_parameters', ''enhanced_recognition''
*2'polarity', '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

猜你喜欢

转载自www.cnblogs.com/yangmengke2018/p/11869026.html
今日推荐