【转】Delphi+Halcon实战一:两行代码识别QR二维码

Delphi+Halcon实战一:两行代码识别QR二维码

感谢网友:绝代双椒( QQ:51536348)的支持

本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.com网站的升级,halcon没时间操作。

不过,随着国内产业升级,机器人行业的发展,Delphi+Halcon的未来,是无可限量的。

其他网友,有halcon这方面作品的,有需要,也可以交给zw转发。

另外,zw正在争取培训机构合作,开办Delphi+Halcon方面的培训的项目,有兴趣的机构可以联系QQ:357811718(字王)

环境:
Delphi XE8 Update1、Halcon 12、一张QR二维码图片。图片是自己先用报表工具生成的,然后打印出来,再用手机拍照。为了测试干扰识别,在图片上乱涂乱画了。
结果:
核心代码只有2行,准确识别,识别时间仅为 25ms 左右!!!!!!!!!!

 1 unit Unit1;
 2
 3 interface
 4
 5 uses
 6   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
 7   Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleServer,
 8   HALCONXLib_TLB, Vcl.OleCtrls, System.Diagnostics;
 9
10 type
11   TForm1 = class(TForm)
12     HWindowXCtrl1: THWindowXCtrl;
13     Memo1: TMemo;
14     Button2: TButton;
15     procedure Button2Click(Sender: TObject);
16   private
17     { Private declarations }
18   public
19     { Public declarations }
20   end;
21
22 var
23   Form1: TForm1;
24
25 implementation
26
27 {$R *.dfm}
28
29 procedure TForm1.Button2Click(Sender: TObject);
30 var
31   op: HOperatorSetX;
32   srcImgage, SymbolXLDs: HUntypedObjectX;
33   hv_Width, hv_Height: OleVariant;
34   DataCodeHandleQR, ResultHandles1, DecodedDataStrings: OleVariant;
35   SaveFileName: OleVariant;
36   Stopwatch: TStopwatch;
37 begin
38
39   Memo1.Lines.Clear;
40   op := CoHOperatorSetX.Create;
41   // 清空图像
42   op.GenEmptyObj(srcImgage);
43   // 读取图像
44   op.ReadImage(srcImgage, ExtractFilePath(ParamStr(0)) + ‘img\2DQR.jpg‘);
45   // 取得尺寸,按 HWindowXCtrl1 的实际大小显示图片
46   op.GetImageSize(srcImgage, hv_Width, hv_Height);
47   HWindowXCtrl1.HalconWindow.SetPart(0, 0, hv_Height - 1, hv_Width - 1);
48   // 显示图像
49   op.DispObj(srcImgage, HWindowXCtrl1.HalconWindow.HalconID);
50   // 以下两行为核心代码,只需要两行,便可识别出QR二维码
51   // 具体参数说明,请见HALCON的帮助手册
52   Stopwatch := TStopwatch.StartNew;
53   op.CreateDataCode2DModel(‘QR Code‘, ‘default_parameters‘, ‘maximum_recognition‘, DataCodeHandleQR);
54   op.FindDataCode2D(srcImgage, SymbolXLDs, DataCodeHandleQR, ‘train‘, ‘all‘, ResultHandles1, DecodedDataStrings);
55   // 将识别出来的QR二维码写在图片上
56   HWindowXCtrl1.HalconWindow.SetColor(‘red‘);
57   HWindowXCtrl1.HalconWindow.SetTposition(300, 300);
58   HWindowXCtrl1.HalconWindow.WriteString(‘发现QR码:‘ + DecodedDataStrings);
59   // 同时显示二维码到Memo中去
60   Memo1.Lines.Add(‘QR码:‘ + DecodedDataStrings + ‘耗时:‘ + Stopwatch.ElapsedMilliseconds.ToString + ‘ ms‘);
61   // 将写有二维码内容的图片重新保存
62   // 注意:读取出来的二维码后面有换行字符,要去掉,不然保存不了
63   SaveFileName := ExtractFilePath(ParamStr(0)) + ‘img\‘ + Trim(DecodedDataStrings);
64   // 保存当前图片,但只是保存当前窗口大小的
65   // 我只想到了这种办法,如何以原图显示,请  ZW  改写
66   op.DumpWindowImage(srcImgage, HWindowXCtrl1.HalconWindow.HalconID);
67   op.WriteImage(srcImgage, ‘jpg‘, 0, SaveFileName);
68 end;
69
70 end.
时间: 2025-01-11 18:26:46

【转】Delphi+Halcon实战一:两行代码识别QR二维码的相关文章

在树莓派(Debian系统)上通过usb摄像头扫描识别QR二维码

树莓派(Debian系统)自带Python开发环境IDLE(Python 2.7.3),接上摄像头,就能通过Python实行对QR code的创建和识别: 首先,需要在树莓派上安装如下工具: sudo apt-get install python-imaging sudo apt-get install zbar-tools sudo apt-get install qrencode sudo apt-get install python-pygame 然后创建qrcode.py文件: #!/u

Python调用Tesseract-OCR和Zxing完成图片OCR识别和二维码解码

先贴代码: # 1.Install tesseract-ocr*.exe from http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tesseract-ocr-setup-3.02.02.exe # 2.Install pillow as"pip install form *.whl" # 3.Install pytesseract as"pip install form *.whl" import

1行Python代码制作动态二维码

原文地址 https://blog.csdn.net/m0_38106923/article/details/100603516 GitHub网站参见:https://github.com/sylnsfar/qrcode 原文地址:https://www.cnblogs.com/php-linux/p/11843357.html

二维码识别之Android完整编译Zbar

版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 大概刚做Android开发的时候就做过二维码扫描,那时候懂的东西少,就搜出来了ZXing和Zbar两个库.ZXing是纯Java代码实现的,适用于Android平台:Zbar是C实现的,可以供很多语言和平台使用,比如Java.iOS平台.Android平台,Python等等.很明显Zbar的识别率和速度都是明显快于ZXing的,但是无奈那时候不会编译Zbar,只好下载了ZXing,但是由于当时技术能

php 识别二维码(转载)

近段需要写一个通过PHP来识别二维码的功能,在网上查了很久才解决问题.以此来记录下来解决问题的方法. 最开始找的方法是一个叫 php-zbarcode 的扩展,自己照着网上的安装步骤安装了 ImageMagick 和 zbar ,但编译 php-zbarcode 时出错了,后来换成Center OS 系统还是出错,由于技术有限也就放弃了. 然后是在github上找到了一个叫 php-qrcode-detector-decoder 的扩展,安装方法和使用方法如下,但安装完成后,只能识别只有二维码的

基于opencv3.0和zbar下的条形码与二维码识别

其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2. 利用opencv和Zbar(或者Zxing)对标准的QR二维码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 3. 对非标准条形码,进行定位,然后用Zbar(或者Zxing)解码显示. 4. 对非标准的QR二维码图片,进行定位,然后用Zbar(或者Zx

【咸鱼教程】Egret可长按识别二维码(精确位置和大小)

教程目录一 实现原理二 实现过程三 Demo下载 本教程是在Egret中实现长按识别的二维码,并可以精确定位二维码的位置和大小,支持横屏和竖屏. 一 实现原理 微信中长按识别二维码,需要长按jpg或png等图片上,才会调起识别. 因为egret中的二维码,是绘制在canvas上的,故不能被长按识别. 所以为了解决这个问题,需要在canvas上覆盖一个二维码<img>标签, 达到可以长按识别的需求. 二 实现过程 1 在index.html中为div增加id = gameDiv,以备在egret

使用zxing二维码识别

1.多二维码识别 (同一张图片中多二维码识别) 直接上代码舒服: 1 /** 2 * Parse multiple qr codes(解析多个二维码) 3 * 4 * @param bufferedImage image 5 * @return QRCode analysis results 6 */ 7 @Override 8 public Result[] analysisQRCodeOfMore(BufferedImage bufferedImage) { 9 QRCodeMultiRea

关于viewport引起的微信二维码识别区域偏移的问题讨论与解决

一.问题概述 在开发一个含有二维码的微信页面时,我遇到了这样一个问题:使用iPhone第一次进入该页面时,二维码可以长按识别,但第二次进入时长按无法识别到二维码.安卓机都能识别. 二.我进行了以下尝试: 移除控制进入条件的脚本,即部分第一次第二次,长按不能识别二维码.暂时排除脚本原因. 移除二维码所有样式,发现并不是不能识别到二维码而是识别区域发生了偏移.(图1) 移除所有元素,页面上只留一张二维码,发现识别区域变大.虽然整张图都被识别了但图片外面的区域也会被识别.(图2) 图1 图2阶段性结论