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 ()
转自https://www.cnblogs.com/xh6300/p/10492110.html