一、图像预处理和条码增强

对比度太低:scale_image(或使用外部程序scale_image_range),增强图像的对比度。

图像模糊:emphasize锐化图像,使条码看起来更清晰。

深色背景上读取浅色条码:invert_image反转图像。

二、解码涉及的主要算子

read_image :读图

create_bar_code_model :创建条码模型

find_bar_code :查找条码

clear_bar_code_model :清除条码模型

如果条码非常简单,那么顺次执行上面4个算子就可以完成解码了。另外还有几个算子也很重要:

set_bar_code_param :设置解码时的参数

decode_bar_code_rectangle2 :在指定的矩形区域内解码

get_bar_code_param :获取解码时的参数(如果没有设置过,则获得的是默认值)

get_bar_code_result :获得解码后的结果,例如可以获得条码的类型(Code 128、Code 39等等)

get_bar_code_object :获得解码时的一些对象,例如可以获得解码后的条码区域

三、提高解码能力的其他措施

如果条码图像预处理以后,仍旧解码困难或者解码率不高,那么可以通过以下措施进一步提高解码能力:

1、如果整张图信息太多,则可以先把条码区域挖出来,使用reduce_domain和crop_domain算子,这样不仅可以降低解码难度,还可以减少解码时间。也可使用decode_bar_code_rectangle2在指定的矩形区域内解码。

2、可以尝试把条码图像转正再解码。(这种操作未经严格验证,不知道是否可以有效提高解码率)

3、当条码很密或者很小的时候,可以尝试用zoom_image_factor放大了条码图像。

4、find_bar_code中将“CodeType”设置为“auto”可以读取多种类型的条码,但是会增加运行时间,且可能会降低解码的可靠性。最好只扫描预知的条形码类型。

5、如果对于质量很差的条码,可以模拟日常手机扫码时的操作,即多次改变曝光,多次解码的方式,参考文章:

https://www.cnblogs.com/xh6300/p/9809692.html

6、通过set_bar_code_param算子设置解码时的参数,可以有效提高解码能力。(见下文)

四、set_bar_code_param算子的参数解析

'element_size_min'

条码的最小尺寸,指条码宽度和间距,大码应设大一点,减少处理时间

'element_size_max'

条码的最大尺寸,不能过小也不能过大

'check_char'

是否验证校验位,'absent'不检查校验和,'present'检查校验和

'persistence'

设置为1,则会保留中间结果,评估条码印刷质量时会用到

'num_scanlines'

解码时所用扫描线的最大数目,设置为0表示自动确定,一般设置为2-30

'start_stop_tolerance'

容许误差值,可设置为'low'或者'high',设置为'high'可能造成误判

'orientation'、'orientation_tol'

分别指条码的方向和方向容差,设置准确可大大提高解码效率

'element_height_min'

条码的最小高度,默认值-1表示自动推测条码高度,该参数对速度影响大

'stop_after_result_num'

设置要解码的个数,0表示全部找出,设置为2表示找到2个就不找了

有多个参数需要设置时,也可以把多个参数放在一句话里面,例如:

set_bar_code_param (BarCodeHandle,['check_char','element_size_min','element_size_max'], ['present',5,30])

下面用一个完整的条码解码程序来演示一下:

dev_set_draw ('margin')
dev_set_line_width (2)
set_font (3600, '-Courier New-18-*-*-*-*-1-')list_files ('pic', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])gen_rectangle1 (Rectangle, 500, 10, 765.5, 2050)reduce_domain (Image, Rectangle, Image)
*     crop_domain (ImageReduced, Image)*优化条码图像emphasize (Image, Image, 3, 3, 1)scale_image_range (Image, ImageScaled, 30, 220)*创建条码模型create_bar_code_model ([], [], BarCodeHandle)*设置解码参数set_bar_code_param (BarCodeHandle, 'element_size_min', 4)set_bar_code_param (BarCodeHandle, 'element_size_max',32)set_bar_code_param (BarCodeHandle,'check_char','present')set_bar_code_param (BarCodeHandle, 'persistence', 1)set_bar_code_param (BarCodeHandle, 'num_scanlines', 10)set_bar_code_param (BarCodeHandle, 'start_stop_tolerance', 'high')set_bar_code_param (BarCodeHandle, 'orientation', 0)set_bar_code_param (BarCodeHandle, 'orientation_tol', 20)set_bar_code_param (BarCodeHandle, 'element_height_min', 100)set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 0)*解码**decode_bar_code_rectangle2的解码能力似乎不如find_bar_code,漏掉了一个码
*     smallest_rectangle2 (Rectangle, Row1, Column1, Phi, Length1, Length2)
*     decode_bar_code_rectangle2 (Image, BarCodeHandle, ['Code 128','Code 39'], Row1, Column1, Phi, Length1, Length2, DecodedDataStrings)* ['Code 128','Code 39']这么写表示既可以解128码,也可以解39码find_bar_code (Image, SymbolRegions1, BarCodeHandle, ['Code 128','Code 39'], BarCodeStrings)get_bar_code_param (BarCodeHandle, 'element_size_min', GenParamValues)get_bar_code_object (BarCodeObjects, BarCodeHandle, 'all', 'symbol_regions')get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)get_bar_code_result (BarCodeHandle, 0, 'quality_isoiec15416', Quality)disp_message (3600, BarCodeResults + '码:' + BarCodeStrings, 'image', 20, 20, 'black', 'true')*清除条码模型clear_bar_code_model (BarCodeHandle)stop ()
endfor
   

Halcon 一维码识别相关推荐

  1. halcon一维码识别

    halcon一维码识别 1.创建模板 create_bar_code_model (GenParamName, GenParamValue, BarCodeHandle) GenParamName 可 ...

  2. Halcon一维码识别实例

    目录 一维码识别算子 1.创建条形码阅读器模型 2.设置参数 3.检测和读取图像中的条形码符号 4.获取参数 (1)获取一个或多个描述条码模型的参数 (2)访问在条码符号搜索或解码过程中创建的标志性对 ...

  3. Halcon一维码和二维码识别

    Halcon一维码和二维码识别 一.Halcon一维码识别 二.Halcon二维码识别 一.Halcon一维码识别 1.一维码的识别过程: (1).创建条码模型create_bar_code_mode ...

  4. Halcon 一维码(条形码)

    目录 1. 一维码原理 1.1 定义: 1.2 作用: 1.3 解码: 1.4 原理: 1.5 构成: 2. Halcon识别一维码 2.1 流程: 2.2 获得中间结果的算子 3. 难读取的一维码 ...

  5. Halcon解决方案指南(16)一维码识别

    第16章 一维码识别_BarCode create_bar_code_model创建条形码模型.返回的句柄提供有关条形码结构的所有必要信息. find_bar_code读取条形码.可以指定要搜索的模型 ...

  6. 基于Halcon学习的一维码识别【六】barcode.param_majority_voting.hdev

    该示例程序显示了条形码参数'majority_voting'的效果.条形码阅读器分析多条扫描线,并尝试对其进行解码.默认情况下,一旦一条扫描线被成功解码,该过程就会终止.在某些情况下,由于本地打印错误 ...

  7. iOS上二维码和一维码识别系列一

    这段时间在做iOS上二维码和一维码的识别 其间遇到问题无数, 特此总结下来, 希望能给后来的同学供参考 在iOS上, 做二维码识别, 首先在网上查找资料, 查找到ZBar和ZXing这两个开源的识别程 ...

  8. 基于Halcon学习的一维码识别【十三】ean13.hdev

    读取EAN-13型条形码 总代码: *创建模板 create_bar_code_model ([], [], BarCodeHandle) CodeType := 'EAN-13' * dev_clo ...

  9. 基于Halcon学习的一维码识别【八】barcode.param_meas_thresh_abs.hdev

    使用条形码参数'meas_thresh_abs'的示例程序:该参数可用于在查找我们希望具有高对比度的条形码符号区域时减少误报的数量.为了人工证明这一点,我们试图找到条形码类型的药典,它没有检查字符,因 ...

最新文章

  1. 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个
  2. python3 mysql代码行_教你用100多行写一个数据库(附源码)|python3教程|python入门|python教程...
  3. 密码学原理与实践第三版pdf_云计算原理与实践PDF电子书下载
  4. Oracle使用ODBC连接配置
  5. 数据建模_浅谈数据仓库建设中的数据建模方法
  6. 转帖节选:卓有成效的管理者(彼得.德鲁克)
  7. Java中String转换int
  8. Centos7系统中安装JDK、Tomcat、Mysql
  9. 冲刺Two之站立会议4
  10. 软盘镜像_软盘表示保存,还有14个其他老人图标不再有用
  11. 【QT学习教程1】制作用户登陆界面
  12. 红帽的RHCSA、RHCE、RHCA值得报考吗?
  13. leetcode **773. 滑动谜题(拼图)(2021.6.26)
  14. php实现简单的留言板
  15. SiC MOSFET驱动电压的分析
  16. Windows服务描述及其原理
  17. PowerBI:关于PBIX,PBIT及PBIDS
  18. 四叉树C++实现(增删改查,找邻居)
  19. 转载:看一遍就理解,图解单链表反转
  20. 四川大学计算机学院团委学生会,团委学生会

热门文章

  1. 早上9.10分左右上高架被拍了!
  2. 国外问卷调查常见的几个类型
  3. WPF之DataGrid控件根据某列的值设置行的前景色(色
  4. Java发送httpPost请求带证书
  5. ubuntu下QT报错缺失libgstreamer解决方案
  6. 垃圾回收器与内存分配策略
  7. 百度秘钥无效的解决方法
  8. 苏嵌//季宇晨//2018.7.10
  9. 分布式事务 (秒懂)
  10. Mininet笔记-基本命令