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

感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持

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

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

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

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

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

 unit Unit1;

 interface

 uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleServer,
HALCONXLib_TLB, Vcl.OleCtrls, System.Diagnostics; type
TForm1 = class(TForm)
HWindowXCtrl1: THWindowXCtrl;
Memo1: TMemo;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject);
var
op: HOperatorSetX;
srcImgage, SymbolXLDs: HUntypedObjectX;
hv_Width, hv_Height: OleVariant;
DataCodeHandleQR, ResultHandles1, DecodedDataStrings: OleVariant;
SaveFileName: OleVariant;
Stopwatch: TStopwatch;
begin Memo1.Lines.Clear;
op := CoHOperatorSetX.Create;
// 清空图像
op.GenEmptyObj(srcImgage);
// 读取图像
op.ReadImage(srcImgage, ExtractFilePath(ParamStr()) + 'img\2DQR.jpg');
// 取得尺寸,按 HWindowXCtrl1 的实际大小显示图片
op.GetImageSize(srcImgage, hv_Width, hv_Height);
HWindowXCtrl1.HalconWindow.SetPart(, , hv_Height - , hv_Width - );
// 显示图像
op.DispObj(srcImgage, HWindowXCtrl1.HalconWindow.HalconID);
// 以下两行为核心代码,只需要两行,便可识别出QR二维码
// 具体参数说明,请见HALCON的帮助手册
Stopwatch := TStopwatch.StartNew;
op.CreateDataCode2DModel('QR Code', 'default_parameters', 'maximum_recognition', DataCodeHandleQR);
op.FindDataCode2D(srcImgage, SymbolXLDs, DataCodeHandleQR, 'train', 'all', ResultHandles1, DecodedDataStrings);
// 将识别出来的QR二维码写在图片上
HWindowXCtrl1.HalconWindow.SetColor('red');
HWindowXCtrl1.HalconWindow.SetTposition(, );
HWindowXCtrl1.HalconWindow.WriteString('发现QR码:' + DecodedDataStrings);
// 同时显示二维码到Memo中去
Memo1.Lines.Add('QR码:' + DecodedDataStrings + '耗时:' + Stopwatch.ElapsedMilliseconds.ToString + ' ms');
// 将写有二维码内容的图片重新保存
// 注意:读取出来的二维码后面有换行字符,要去掉,不然保存不了
SaveFileName := ExtractFilePath(ParamStr()) + 'img\' + Trim(DecodedDataStrings);
// 保存当前图片,但只是保存当前窗口大小的
// 我只想到了这种办法,如何以原图显示,请 ZW 改写
op.DumpWindowImage(srcImgage, HWindowXCtrl1.HalconWindow.HalconID);
op.WriteImage(srcImgage, 'jpg', , SaveFileName);
end; end.

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

  1. zxing 如何识别反转二维码

    说起二维码扫描,估计很多人用的是 zxing 吧. 然而 zxing 虽然好用,但是却有一些坑. 这边分析一下自己实际项目遇到的一个坑. 什么坑呢? 下面举个栗子你就懂了. 这边生成二维码使用的是网络 ...

  2. C# vb .NET识别读取QR二维码

    二维码比条形码具有更多优势,有些场合使用二维码比较多,比如支付.那么如何在C#,.Net平台代码里读取二维码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的条形 ...

  3. 在Android上使用ZXing识别条形码/二维码

    越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.......手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文使用ZXing 1.6实现条码 ...

  4. 用一行Python代码制作动态二维码

    在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. GitHub网站参见:https://github.c ...

  5. qrcode.js的识别解析二维码图片和生成二维码图片

    qrcode只通过前端就能生成二维码和解析二维码图片, 首先要引入文件qrcode.js,下载地址为:http://static.runoob.com/download/qrcodejs-04f46c ...

  6. Opencv+Zbar二维码识别(二维码校正)

    二维码和车牌识别基本都会涉及到图像的校正,主要是形变和倾斜角度的校正,一种二维码的畸变如下图: 这个码用微信扫了一下,识别不出来,但是用Zbar还是可以准确识别的~~. 这里介绍一种二维码校正方法,通 ...

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

    原文地址 https://blog.csdn.net/m0_38106923/article/details/100603516 GitHub网站参见:https://github.com/sylns ...

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

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

  9. php 识别二维码(转载)

    近段需要写一个通过PHP来识别二维码的功能,在网上查了很久才解决问题.以此来记录下来解决问题的方法. 最开始找的方法是一个叫 php-zbarcode 的扩展,自己照着网上的安装步骤安装了 Image ...

随机推荐

  1. websocket 实现聊天功能

    <html> <head> <base href="<%=basePath%>"> <title>webscoket t ...

  2. 问题(the question)

    I want to know: 1. 软件开发最主要的目的 是什么? 2. 软件开发是否同样需要模,和架构? 3.软件开发与其他程序的需求分析是否相似,有什么不同之处? 4.软件开发最常用的计算机语言 ...

  3. Delphi XE6 原生解析json

    Delphi XE5带了system.json单元,原生提供了json支持类.下面是解析json用法说明: 最简单的JSON大致像这样 { "date":"周二(今天, ...

  4. Yii源码阅读笔记(三十一)

    Widget类中开始,获取视图对象,获取widget ID,渲染视图,获取路径方法注释: private $_id; /** * Returns the ID of the widget. * 返回插 ...

  5. MVC5 视图 不显示 Styles.Render Scripts.Render 问题解决

    第一步:安装 WebGrease 使用 nuget 安装 WebGrease 安装依赖 第二步:修改配置文件 <configSections> <!-- For more infor ...

  6. 掌握Thinkphp3.2.0----CURD

    TP-----CURD  create()创建数据----整理数据 在数据库添加等操作之前,我们首先需要对数据进行创建.何为数据创建,就是接受提交过来的数据,比如表单提交的 POST(默认)数据.接受 ...

  7. 1JavaScript简介

    文档对象模型(DOM,Document Object Model)是针对XML但经过扩展用于HTML的应用程序编程接口(API,Application Programming Interface). ...

  8. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  9. 毕设1--利用Java实现网页的模板功能技术---简要了解

    首先,关于我对自己的毕业设计题目的理解,其中没有接触过的技术有怎么用Java实现将原有的Word的模板上传到网页中,在网页中进行相关操作.之所以把这部分放在一开始来进行了解是因为没有接触过这一方面,比 ...

  10. 【LINUX】VI相关命令

    任何用户最常做的事要数创建和编辑文件,包括文档.报告和文字,vi(Visual Editor)是一个有效而相对简单的全荧幕编辑,使用vi,只要记著少量基本指令,就可以开始起步,再学习其他更复杂的指令, ...