QQ登录

只需一步,快速开始

2.3 halcon通过带扫描线识别条形码

[ 复制链接 ]
在扫描条形码时,可以在事先确定的条码矩形区域内,通过设置多条扫描线进行条码识别。
每条扫描线扫描的结果都相同才表示扫码成功。
当前实例实现 使用最少两条扫描线识别条形码功能。
代码和注释如下:

2.3 halcon通过带扫描线识别条形码

2.3 halcon通过带扫描线识别条形码

  1. dev_close_window()
  2. dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
  3. dev_set_draw ('margin')
  4. dev_update_window ('off')
  5. dev_set_line_width (2)
  6. Files := ['ean1314','ean1313']
  7. *创建条形码模型句柄。
  8. create_bar_code_model ([], [], BarCodeHandle)
  9. *设置要查找的条码的最小宽度参数,也就是黑色和白色矩形 条沿着扫描方向的最小宽度
  10. set_bar_code_param (BarCodeHandle, 'element_size_min', 1.5)
  11. *设置要查找条码的解码过程的中间结果是否保存,1是,0,否。
  12. set_bar_code_param (BarCodeHandle, 'persistence', 1)
  13. *设置最少使用两条扫描线进行计算,结果相同才认为结果正确
  14. set_bar_code_param (BarCodeHandle, 'min_identical_scanlines', 2)
  15. for I :=0 to |Files|-1 by 1
  16.     Filename := 'barcode/ean13/'+Files[I]
  17.     read_image (Image, Filename)
  18.     get_image_size (Image, Width, Height)
  19.     dev_set_window_extents(0,0,Width, Height)
  20.     dev_display (Image)
  21.     *在图片中开始查找条码,字符结果保存在DecodedDataStrings,条码区域保存在SymbolRegions
  22.     find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
  23.     if(|DecodedDataStrings|)
  24.         CandidatesIds := [0:|DecodedDataStrings|-1]
  25.     else
  26.         CandidatesIds := 'all'
  27.     endif
  28.     *获取条码计算的中间结果:条码区域
  29.     get_bar_code_object(Candidates, BarCodeHandle, CandidatesIds, 'candidate_regions')
  30.     dev_set_color ('green')
  31.     dev_display (Candidates)
  32.     *获取条码计算的中间结果:扫描线
  33.     get_bar_code_object(ValidScanLines, BarCodeHandle, CandidatesIds, 'scanlines_valid')
  34.     dev_set_color ('yellow')
  35.     dev_display (ValidScanLines)
  36.     if(I<|Files|)
  37.         disp_continue_message(WindowHandle, 'black', 'true')
  38.         stop()
  39.     endif
  40. endfor
  41. clear_bar_code_model (BarCodeHandle)
复制代码



一维码识别相关函数也就16个。

一维码识别相关函数也就16个

一维码识别相关函数也就16个

可按下F1,结合手册查阅这些函数,
下面是结合代码,一步步执行查看每个函数的执行效果。
从而熟悉每个函数的作用与使用场景。
  1. dev_close_window ()
  2. dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
  3. *读取图片,用于条码识别
  4. read_image (Image, 'barcode/mixed/barcode_mixed_02')
  5. dev_display (Image)
  6. *创建条码模型句柄,用于后面条码识别
  7. create_bar_code_model ([], [], BarCodeHandle)
  8. *设置条码识别过程中,中间变量是否保留,1保留,0不保留,为1时下面get_bar_code_object才有效
  9. set_bar_code_param (BarCodeHandle, 'persistence', 1)
  10. *执行条码查找,结果字符串保存在DecodedDataStrings,条码所在区域保存在SymbolRegions
  11. find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
  12. *获取条码识别过程中的中间变量:扫描线;
  13. get_bar_code_object (Scallines, BarCodeHandle, 'all', 'scanlines_valid')
  14. *获取条码识别的设置参数。和set_bar_code_param对应。
  15. get_bar_code_param (BarCodeHandle, 'persistence', GenParamValue)
  16. *获取所有可以在get_bar_code_param和set_bar_code_param函数中使用的条码参数
  17. query_bar_code_params (BarCodeHandle, 'all', GenParamName)
  18. *将条码句柄(包含设置信息)保存到磁盘,供后期读取使用。
  19. write_bar_code_model (BarCodeHandle, 'bar_code_model.bcm')
  20. *清静条码句柄,释放内存资源。
  21. clear_bar_code_model (BarCodeHandle)
  22. *从事先 保存的文件读取条码句柄,并进行读码操作。
  23. read_bar_code_model('bar_code_model.bcm', BarCodeHandle)
  24. find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
  25. get_bar_code_object (Scallines, BarCodeHandle, 'all', 'scanlines_valid')
  26. *串行化条码句柄(包含设置信息),并保存到磁盘.
  27. serialize_bar_code_model (BarCodeHandle, SerializedItemHandle)
  28. open_file('123.bin','output_binary',FileHandle)
  29. fwrite_serialized_item (FileHandle, SerializedItemHandle)
  30. close_file (FileHandle)
  31. clear_bar_code_model (BarCodeHandle)
  32. *从磁盘读取事先串行化的文件到条码句柄,并进行条码识别;
  33. open_file('123.bin','input_binary',FileHandle)
  34. fread_serialized_item (FileHandle, SerializedItemHandle)
  35. deserialize_bar_code_model (SerializedItemHandle, BarCodeHandle)
  36. find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
  37. get_bar_code_object (Scallines, BarCodeHandle, 'all', 'scanlines_valid')
  38. *获取成功解码后的一些信息,如条码类型decoded_types,条码字符串decoded_strings
  39. get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', BarCodeResults)
  40. *为指定类型的条码设置参数
  41. set_bar_code_param_specific (BarCodeHandle, ['EAN-13','Code 39'] ,'orientation', [90.0,0.0])
  42. find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
  43. *获取指定类型条码的参数
  44. get_bar_code_param_specific (BarCodeHandle, ['EAN-13','Code 39'], 'orientation_tol', GenParamValue)
  45. dev_display(Image)
  46. Row:=475
  47. Column:=465
  48. Phi:=0.07
  49. Length1:=265
  50. Length2 :=80
  51. *在图片指定区域内读取条码。
  52. decode_bar_code_rectangle2 (Image, BarCodeHandle, 'Code 39', Row, Column, Phi, Length1, Length2, DecodedDataStrings)
  53. *当读取的条码类型是Code 32时,其结果可用此函数转换为Code 39类型字符串。
  54. convert_decoded_string_code39_to_code32(DecodedDataStrings, ConvertedDataStringCode32)










复制代码


回复

使用道具 举报

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