如何利用Halcon进行二维码QR码的识别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用Halcon进行二维码QR码的识别相关的知识,希望对你有一定的参考价值。

  众所周知,二维码在网络上已经普及开来,由于他易于识别,信息量大,我们常常登陆微信网页版,支付的时候都需要进行二维码的扫描。而工业生产中,我们也常用二维码识别,如果自己开发二维码识别的话需要花大量的时间和经历,因此我们经常采用Halcon来进行调用。但是如果想进行二维码识别,首先要求是具有一定的对比度,其次二维码不能过小,最后互相之间不要连接起来。要采用白色底色,黑色块的组合,否则会产生误判。满足以上需求,我们就可以进行识别了。以下是Halcon的代码
  read_image (Image, \'C:/Users/Administrator/Desktop/1.tiff\') //读取图片
create_data_code_2d_model (\'QR Code\', [], [], DataCodeHandle)//创建识别QR码模型
set_data_code_2d_param (DataCodeHandle, \'default_parameters\', \'enhanced_recognition\')//设置模型参数
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)//进行识别,保存到DecodeDataStrings

  代码非常简单,下面导出到C++的代码,方便我们嵌入到自己的软件中。结构都是一样的,只是调用了Halcon的头文件而函数而已。
  #include <iostream>
#include "HalconCpp.h"
using namespace HalconCpp;
int main()

HObject ho_Image, ho_SymbolXLDs;
// Local control variables
HTuple hv_DataCodeHandle, hv_ResultHandles, hv_DecodedDataStrings;
ReadImage(&ho_Image, "C:/Users/Administrator/Desktop/1.tiff");
CreateDataCode2dModel("QR Code", HTuple(), HTuple(), &hv_DataCodeHandle);
SetDataCode2dParam(hv_DataCodeHandle, "default_parameters", "enhanced_recognition");
FindDataCode2d(ho_Image, &ho_SymbolXLDs, hv_DataCodeHandle, HTuple(), HTuple(),
&hv_ResultHandles, &hv_DecodedDataStrings);
std::cout<<hv_DecodedDataStrings[0].S()<<std::endl;
system("pause");
return 0;
参考技术A

QR 码是二维条码的一种,QR来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。QR码比普通条码可储存更多资料,亦无需像普通条码般在扫描时需直线对准扫描器。

识别方式:

    利用30万像素以上的照相手机,搭配手机内的QR码解码软件,对着QR码一照,解码软件会自动解读此信息,显示于手机屏幕上面。

    也有运用到Webcam的镜头来解码,预计未来所有有镜头的科技产品,都会被导入此QR码的机制。

    此外,QRDOOR、QuickMark提供PC版的QR码解码软件,让没有照相手机的用户也能直接通过PC版QR码解码软件直接截取屏幕上的QR码,以得到相关信息,让一般手机和PC用户也能体验QR码带来的方便性。

Halcon二维码识别

Stack Code: PDF417

Matrix Code: Data Matrix ECC200,QR Code,Micro QR Code,Aztec Code

3种识别模式:standard mode,enhanced mode,maximum recognition mode

create_data_code_2d_model (SymbolType[Index], ‘default_parameters‘, ‘standard_recognition‘, DataCodeHandleStandard)
create_data_code_2d_model (SymbolType[Index], ‘default_parameters‘, ‘enhanced_recognition‘, DataCodeHandleEnhanced)
create_data_code_2d_model (SymbolType[Index], ‘default_parameters‘, ‘maximum_recognition‘, DataCodeHandleMaximum)

  It is strongly recommended to use the standard mode and additionally adjust the parameters either by applying an automatic training (see next section) or by setting specific parameters manually. But note that if your symbols cannot be decoded in enhanced or maximum mode, apart from a few exceptions, a further adaptation of the model will not work either. In such a case, you should enhance the quality of your images. This can be done either during the image acquisition (pay attention,e.g., to the lighting conditions), which is recommended, or by a preprocessing.

query_data_code_2d_params (DataCodeHandle, ‘get_model_params‘, GenParamName) //获取模型参数
get_data_code_2d_param (DataCodeHandle, GenParamName, ModelBeforeTraining) //获取参数值

 

以上是关于如何利用Halcon进行二维码QR码的识别的主要内容,如果未能解决你的问题,请参考以下文章

Halcon图像的一维码二维码识别

Halcon条码和二维码质量评级

Halcon条码和二维码质量评级

qr码和二维码区别

QR二维码原理

Labview读取二维码