Halcon中条码解析函数包容多种条码类型且简单强大。现有的‘Data Matrix ECC 200’、‘QR Code’和‘PDF417’等广泛使用的条码均能解析。简单是通过默认参数即可对多种条码进行解析;强大是指通过设定条码的参数能够获得更高的解码率以及大幅度的降低解码时间。

1. 解码入门——默认参数的使用

Halcon中的解码共分为3步:一是创建解码模型;二是对图片进行解码;最后是清除模型。

1. 1创建解码模型

创建解码模型的函数如下: 
create_data_code_2d_model (: : SymbolType, GenParamNames, GenParamValues : DataCodeHandle) 
       其中,SymbolType是二维码模型,Halcon10支持‘Data Matrix ECC 200’、‘QR Code’和‘PDF417’共3种类型。 
       GenParamNames是二位码模型的属性。如果是默认属性,其值为‘default_parameters’。除了默认属性之外,还有各种不同的二维码属性,这些属性需要根据二维码的实际情况来设置。 
        GenParamValues是属性的值。如果是默认属性,则有3种级别的值: 
‘standard_recognition’、‘enhanced_recognition’、‘maximum_recognition’。 
       其中,standard_recognition的解码能力一般,而maximum_recognition的解码能力最强。但凡事均具有两面性,这三种级别的值在提高了解码率的同时,也提高了解码失败时的解码时长。而且使用高级别的解码函数在解不出来的情况下,解码时长甚至有达到6s的情况,这在工业控制领域内绝对是无法忍受的。不过,我们可以通过设置参数来调整,这正是本文的第二节要讲述的内容。 
       如果不是默认属性,就根据实际属性和实际的二维码图片来设置属性的值。 
       DataCodeHandle是该函数所创建模型的句柄,是输出控制变量。

1.2 解码

在建立了模型之后,使用如下解码函数,就可以在输入图像Image中进行解码了。 
find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamNames, GenParamValues : ResultHandles, DecodedDataStrings) 
       其中,Image是输入的二维码图像。 
       SymbolXLDs是解码成功后找到并输出的二维码边缘。 
       DataCodeHandle是create_data_code_2d_model创建的二维码模型句柄。 
       GenParamNames是解码函数的属性名,默认值为 []。 
       GenParamValues是解码函数的属性值,默认值为 []。 
       ResultHandles和DecodedDataStrings输出值,分别是解码结果句柄和解出来的二维码字符串。

1.3清除模型

良好的编程习惯之一即是及时清理内存。使用clear_data_code_2d_model函数能清理创建的二维码模型。 
clear_data_code_2d_model (DataCodeHandle) 
       DataCodeHandle是创建的二维码模型句柄。

1.4 默认模型程序示例

通过以上3个步骤,建立模型、解码和清除模型内存就能轻松的进行解码了。下面是程序示例

  1. *创建模型
  2. create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
  3. 该模型默认属性是‘default_parameters’,默认属性值是 standard_recognition’。实际上,为了获得更好的解码结果,可以将属性值置为‘enhanced_recognition’、‘maximum_recognition’。
  4. *读取图片
  5. read_image (Image, 'E:/驱动/py/20160801/001501_4_Mic .bmp')
  6. *解码
  7. find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \
  8. ResultHandles, DecodedDataStrings)
  9. 默认为空,也可以使用‘train’, all’配套属性参数,在这种方式下,模型会自主微参数来达到最好的解码效果。
  10. find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, train’, all’, \
  11. ResultHandles, DecodedDataStrings)
  12. *清除模型
  13. clear_data_code_2d_model (DataCodeHandle)
  14. create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)

2 解码升级——解码参数的设置

在解码入门之后,下面介绍的就是本文的重头戏。在工业级别的解码器上,首先要考虑的需求有两个,一是解码率尽可能高,二是CT时间尽可能短,也就是解码所耗费的时间尽可能短。因此,如果简单使用最大化解码的参数,在无法解码的情况下就会导致解码耗时过长,而不使用最大化解码参数,则解码率会有所下降。那么,“世上安得双全法,不负如来不负卿”。而下文介绍的,便是既能获得高解码率,又能降低解码时长的方式。其重点在与解码模型的建立与其解码参数的设置。

2.1 解码模型的参数

首先,为了获得高解码率,必须要使用如下函数建立解码模型 
create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandle) 
       同时,在建立解码模型之后,调用如下函数对模型进行参数的修正。 
       (1)其中最终要的参数之一是解码时长的设置,如果解码函数在一定时长范围内难以解出条码,直接将条码丢弃也是一种弃车保帅的明智之举。而如下参数设置函数能实现 
set_data_code_2d_param (DataCodeHandle, 'timeout', 200) 
       如下函数能将解码时长限制在200ms内,这意味着,及时解不出条码,200ms之后制动放弃该条码的解析。 
       (2)就是条码极性的设置,所谓极性是指条码颜色和条码底色。如下函数设置指明,条码较亮,而底色较暗。如果实际图片与设置的极性吻合,就能有较好的检测的结果。注意:如果极性设置与实际相反,则会严重的降低解码率。 
set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark') 
       (3)条码的基本特征设置,二维码的基本特征包括码粒数、码粒像素大小。比如二维码码粒数,ECC 200的条码每行大约有18个码粒。而每个码粒所占的像素大小需根据实际的情况来设置。注意:如下代码的参数需为偶数。

  1. *码粒个数设置
  2. set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', 16)
  3. set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', 20)
  4. *码粒像素设置
  5. set_data_code_2d_param (DataCodeHandle, 'module_size_min', 10)
  6. set_data_code_2d_param (DataCodeHandle, 'module_size_max', 14)

通过这些设置,极大的减小了解码时长,另一方面,也能保障有较高的解码率。

2.2 示例

  1. create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandle)
  2. set_data_code_2d_param (DataCodeHandle, 'timeout', 200)
  3. set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')
  4. set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', 16)
  5. set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', 20)
  6. set_data_code_2d_param (DataCodeHandle, 'module_size_min', 10)
  7. set_data_code_2d_param (DataCodeHandle, 'module_size_max', 14)
  8. read_image (Image, 'E:/驱动/py/20160801/001501_4_Mic .bmp')
  9. find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \
  10. ResultHandles, DecodedDataStrings)
  11. clear_data_code_2d_model (DataCodeHandle)

Halcon中二维码解析函数解码率和时长的优化方法的更多相关文章

  1. iOS - 长按图片识别图中二维码

    长按图片识别图中二维码: // 长按图片识别二维码 UILongPressGestureRecognizer *QrCodeTap = [[UILongPressGestureRecognizer a ...

  2. C#识别图中二维码

    1.在NuGet中添加 ZXing.Net 2.实例代码 /// <summary> /// 识别图中二维码 /// </summary> /// <param name ...

  3. Vue实现长按图片识别图中二维码

    Vue实现长按图片识别图中二维码 思路:要想实现可以识别图片中的二维码,那必定是要将这张图进行上传操作,上传则需要file对象格式.不管是在H5还是APP中,展示的图片都是通过url的方式展示在img ...

  4. ios中二维码的使用之一: 二维码的生成

    iOS在7之后,具备了原生的二维码生成API; 生成二维码的准备:  #import <CoreImage/CoreImage.h> 导入框架: 开始生成: //1- 创建过滤器 CIFi ...

  5. windows8运行zxing源码 生成与解码二维码 详解(含注释与图解可直接运行)

    1 下载zxing2.1 2 本代码配置环境:eclipse.java1.6.windows8.zxing2.1 3 解压后将文件夹里面core/src下面的com文件夹导入到eclipse工程(工程 ...

  6. 二维码详解(QR Code)

    作者:王子旭链接:https://zhuanlan.zhihu.com/p/21463650来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 2016.7.5 更新:长文 ...

  7. ios中二维码的使用之二: 二维码的扫描

    二维码的扫描: 1,导入支持框架,<AVFoundation/AVFoundation.h> 2 ,扫描:

  8. iOS 中二维码扫描

    随着微信的大量推广,越来越多的人会在生活中用到二维码这一个方便大家的功能. 因此,很多的app中也逐渐的都加入了二维码这个元素,今天先给大家介绍一下iOS7后系统自带自己可以手动设计的二维码扫描. Q ...

  9. iOS 中二维码扫描(zxingObjc和原生)

    对于网上的第三方 ZXingObjC,自我感觉是对原生的AVFoundation中关于二维码部分的一个封装,大致看看ZXingObjC的内部实现其事和原生的实现相似的,里面都用到了AVFoundati ...

随机推荐

  1. 【转】 linux的网络接口之扫盲

    [转] linux的网络接口之扫盲 转自:http://blog.csdn.net/zhangxinrun/article/details/6820433 (1)网络接口的命名 这里并不存在一定的命名 ...

  2. json.dumps与json.dump的区别 json.loads与json.load的区别(简洁易懂)

    json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块 >>& ...

  3. asp.net中的时间日期选择控件

    asp.net中的时间日期选择控件 Posted on 2008-07-17 17:37 飛雪飄寒 阅读(22922) 评论(6) 编辑 收藏     在系统中经常需要进行时间日期选择(比如查询时间范 ...

  4. Bitdefender Total Security 2014 Free 6 Months & 12 month License Key

    German Only – Bitdefender Total Security 2014 Free 6 Months Serial License Keyhttp://www.bitdefender ...

  5. 知名第三方编译版tete009 Firefox 24.0

    Firefox除了官方版本上还有许多由爱好者自己编译修改的第三方版本. 其中 tete009 是十分流行的一个版本,目前tete009 Firefox 24.0 版本发布. tete009版Firef ...

  6. C++11_ 右值引用

    版权声明:本文为博主原创文章,未经博主允许不得转载. 由于右值所产生的临时变量问题一直是一种诟病,C++11中引入了右值引用这个核心语言机制,来提升运行期性能. 首先我先说明一下什么是左值和右值: 左 ...

  7. cratedb geo 查询

    cratedb支持的geo 查询还相对比较全,开发基本的功能已经够用了 安装cratedb 使用docker docker run -d -p 4200:4200 crate 创建数据库 创建表 CR ...

  8. 什么是HBASE(三) HBase的压缩和编码

    在存储层面节省空间的处理上,Hbase提供了两种方案,一个是基于key的编码,一个是基于数据块(data block)的压缩.前者用于将key重复部分进行简单处理达到节约空间的目的,后者则是对数据块进 ...

  9. 安装 nodejs,npm,pm2

    一:需要安装组件: nodejs,npm,pm2 安装epel 源: rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel ...

  10. linux 下 ifcfg-eth0 配置/CentOS_minimal安装和开发环境部署

    CentOS_minimal安装和开发环境部署:http://www.th7.cn/system/lin/201305/39002.shtml 网络接口配置文件 [root@localhost ~]# ...