解码入门
来源:互联网 发布:php将数组转换成字符串 编辑:程序博客网 时间:2024/04/28 14:33
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个步骤,建立模型、解码和清除模型内存就能轻松的进行解码了。下面是程序示例
*创建模型create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle) 该模型默认属性是‘default_parameters’,默认属性值是 ‘standard_recognition’。实际上,为了获得更好的解码结果,可以将属性值置为‘enhanced_recognition’、‘maximum_recognition’。*读取图片read_image (Image, 'E:/驱动/py/20160801/001501_4_Mic .bmp')*解码find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \ ResultHandles, DecodedDataStrings)默认为空,也可以使用‘train’, ‘all’配套属性参数,在这种方式下,模型会自主微参数来达到最好的解码效果。find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, ‘train’, ‘all’, \ ResultHandles, DecodedDataStrings)*清除模型clear_data_code_2d_model (DataCodeHandle)create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
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个码粒。而每个码粒所占的像素大小需根据实际的情况来设置。注意:如下代码的参数需为偶数。
*码粒个数设置set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', 16)set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', 20)*码粒像素设置set_data_code_2d_param (DataCodeHandle, 'module_size_min', 10)set_data_code_2d_param (DataCodeHandle, 'module_size_max', 14)
- 1
- 2
- 3
- 4
- 5
- 6
通过这些设置,极大的减小了解码时长,另一方面,也能保障有较高的解码率。
2.2 示例
create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandle)set_data_code_2d_param (DataCodeHandle, 'timeout', 200)set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', 16)set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', 2)set_data_code_2d_param (DataCodeHandle, 'module_size_min', 10)set_data_code_2d_param (DataCodeHandle, 'module_size_max', 14)read_image (Image, 'E:/驱动/py/20160801/001501_4_Mic .bmp')find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \ ResultHandles, DecodedDataStrings)clear_data_code_2d_model (DataCodeHandle)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 解码入门
- 音视频解码入门
- ffmpeg编解码开发入门
- AIS教程入门解码1
- AIS教程入门解码2
- Netty的入门-编解码技术
- 解码
- 解码
- 解码
- 解码
- 解码
- FFMPEG视音频编解码入门学习总结
- 视频编解码之H.264快速入门
- ffmpeg入门(四) 解码部分代码整理
- Python入门:input获取\xe4\xb8\xad字符正确解码
- AndroidJNI入门之G.711音频编解码
- FFmpeg 3 跨平台视音频编解码入门基础
- 架构师入门笔记十一 Netty5编解码
- 目标文件里有什么
- 【学习笔记】Python的 Hello world
- ubuntu安装nodejs
- HTML——格式标签
- 1072. 开学寄语(20) PAT乙级真题
- 解码入门
- java继承
- 第三方支付宝集成Demo
- HTML——<img />图像标签
- Linux进程通信(二)
- HTML——a标签、锚点、路径
- C++ map使用详解
- python--leetcode 733. Flood Fill
- 使用postman模拟与后端flask的Get/Post数据交互