精华内容
下载资源
问答
  • C++/QT+Qzxing实现二维码识别(windos/ubuntu/arm 环境下均可使用) 文章目录前言一、Qzxing是什么?二、使用步骤1.引入源码到工程内2.关键代码Demo示例: 前言 Qzixng是什么? 提示:以下是本篇文章正文内容,...


    一、Qzxing是什么?

    QZXing是对ZXing库的一个Qt外包库(Qt wrapper library),是识别QRCode中的一种。

    二、使用步骤

    1.引入源码到工程内

    代码如下:

    QT += core gui
    CONFIG += c++11
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    include(src/QZXing.pri) // 在自己工程的.PRO文件内将源码引入(源码路径为自己保存源码的路径)

    TARGET = Qzxing_demo
    TEMPLATE = app

    SOURCES += main.cpp
    widget.cpp

    HEADERS += widget.h

    FORMS += widget.ui

    2.关键代码

    代码如下:

    #include “QZXing.h”

    QZXing decoder;
    decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
    decoder.setTryHarderBehaviour(QZXing::TryHarderBehaviour_ThoroughScanning | QZXing::TryHarderBehaviour_Rotate);
    QString qrmsg = decoder.decodeImage(readImage);
    qDebug()<<"result:"<<qrmsg;
    

    Demo示例:

    在这里插入图片描述

    此次主要介绍QT中如何使用引入QZxing源码的方式来实现二维码识别,为那种一份代码需要在多个平台下编译提供方面。

    Demo 下载地址:
    https://download.csdn.net/download/weixin_44111250/16199116

    展开全文
  • 日常使用的二维码识别原理

    千次阅读 2021-07-14 10:22:40
    由一块一块黑白方块组成的二维码在...1)二维码存储信息原理与计算机识别0和1是一样的。比如一个黑色块代表1,白色块代表0,我们假设“1000101”代表信息“A”,用二维码表示:黑白白白黑白黑,当我们手机扫描二维码

    由一块一块黑白方块组成的二维码在我们生活中随处可见,收付款、加好友等等。那么二维码是如何通过黑白方块来存储信息的呢?

    一、二维码的40种版本与8种款式
    1)二维码版本:21x21 ~177x177,共有40个版本。除了面积不同之外,版本越高,二维码承载和储存的信息越多。
    2)二维码款式:有8个款式在,这些款式中黑白块分布均匀。

    二、二维码存储信息的基本原理
    1)二维码存储信息原理与计算机识别0和1是一样的。比如一个黑色块代表1,白色块代表0,我们假设“1000101”代表信息“A”,用二维码表示:黑白白白黑白黑,当我们手机扫描二维码时,将这些黑白块转换成0和1,如此就知道了二维码所存储的信息了。
    2)二维码的组成:定位信息+版本信息+数据编码信息+存储数据信息等。
    在我们用手机扫描二维码时,首先是定位。二维码上排列成三角形的三个大方块、黑色虚线都是用来定位的。我们手机扫描定位后,开始了解二维码的大致情况,这里面包含二维码的版本信息、数据编码之类,剩下区域就是存储数据信息。手机识别二维码信息是从右下角开始的(从下到上,从右到左)。

    三、二维码遮挡或损坏一部分仍然可以识别的原因
    这是因为在二维码中的存储数据区域可以分成两个部分:纠错区域、存储信息区域。纠错部分是备份数据的区域,所以即使二维码被遮挡了一部分,仍然可以用手机识别出来。
    此外,二维码是用容错等级的,一共4个等级。
    (1)L——7%
    (2)M——15%
    (3)Q——25%
    (4)H——30%
    所以二维码的容错等级越高,即使二维码被遮挡的部分大一点依旧不影响扫描,但是提高容错率意味着纠错区域越大,那么二维码存储的数据就自然变少了。

    四、二维码中黑白块分布均匀,没有出先部分全黑或部分全白的现象
    这是因为在生成二维码的过程中,为了避免生成大面积的黑块和白块,进行了“掩码”的操作,二维码经过掩码计算后就会在8个款式中选择一个最合适的一款进行处理,处理完之后二维码中的黑白块就变得均匀了。

    五、二维码会被用光吗?
    二维码是上世纪一家日本公司发明的,早在2016年,全国日平均扫描次数达到15亿次,那么不禁产生疑问:二维码会被用光吗?因为二维码实质上是由0和1组成的,我们知道0和1的组成接近无数种,所以我们不必杞人忧天。

    展开全文
  • 文章目录1 简介2 二维码3 QRCode4 QRCode 特点5 机器视觉二维码识别技术5.1 二维码的识别流程5.2 二维码定位5.3 常用的扫描方法识别测试结果6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍如何利用机器...


    1 简介

    Hi,大家好,这里是丹成学长,今天向大家介绍如何利用机器视觉实现

    二维码图像识别

    大家可用于 毕业设计

    技术解答、开题指导、毕设帮助
    毕设帮助:<Q>746876041
    

    2 二维码

    二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

    3 QRCode

    常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

    4 QRCode 特点

    1、符号规格从版本1(21×21模块)到版本40(177×177 模块),每提高一个版本,每边增加4个模块。

    2、数据类型与容量(参照最大规格符号版本40-L级):

    • 数字数据:7,089个字符
    • 字母数据: 4,296个字符
    • 8位字节数据: 2,953个字符
    • 汉字数据:1,817个字符

    3、数据表示方法:

    • 深色模块表示二进制"1",浅色模块表示二进制"0"。

    4、纠错能力:

    • L级:约可纠错7%的数据码字
    • M级:约可纠错15%的数据码字
    • Q级:约可纠错25%的数据码字
    • H级:约可纠错30%的数据码字

    5、结构链接(可选)

    • 可用1-16个QR Code码符号表示一组信息。每一符号表示100个字符的信息。

    5 机器视觉二维码识别技术

    5.1 二维码的识别流程

    在这里插入图片描述

    首先, 对采集的彩色图像进行灰度化, 以提高后继的运行速度。

    其次, 去除噪声。 采用十字形中值滤波去除噪音对二码图像的干扰主要是盐粒噪声。

    利用灰度直方图工具, 使用迭代法选取适当的阈值, 对二维码进行二值化处理,灰度化 去噪 二值化 寻找探测图形确定旋转角度 定位 旋转 获得数据使其变为白底黑色条码。

    最后, 确定二维码的位置探测图形, 对条码进行定位, 旋转至水平后, 获得条码数据,
    以便下一步进行解码。

    5.2 二维码定位

    QR 码有三个形状相同的位置探测图形, 在没有旋转的情况下, 这三个位置探测图形分别位于 QR 码符号的左上角、 右上角和左下角。 三个位置探测图形共同组成图像图形。

    在这里插入图片描述

    每个位置探测图形可以看作是由 3 个重叠的同心的正方形组成, 它们分别为 77 个深色模块、 55 个浅模块和 3*3 个深色模块。 位置探测图形的模块宽度比为 1: 1:3: 1: 1。

    在这里插入图片描述

    这种 1: 1: 3: 1: 1 的宽度比例特征在图像的其他位置出现的可能性很小, 故可以将此作为位置探测图形的扫描特征。 基于此特征, 当一条直线上(称为扫描线) 被黑白相间地截为1: 1: 3:1: 1 时, 可以认为该直线穿过了位置探测图形。

    另外, 该扫描特征不受图像倾斜的影响。 对比中的两个 QR 码符号可以发现, 无论 QR码符号是否倾斜, 都符合 1: 1: 3:1: 1 的扫描特征。

    在这里插入图片描述

    5.3 常用的扫描方法

    1. 在 X 方向进行依次扫描。

    (1) 固定 Y 坐标的取值, 在 X 方向上画一条水平直线(称为扫描线) 进行扫描。 当扫描线被黑白相间地截为 1: 1: 3: 1: 1 时, 可以认为该直线穿过了位置探测图形。 在实际判定时, 比例系数允许 0. 5 的误差, 即比例系数为1 的, 允许范围为 0. 5~1. 5, 比例系数为 3 的, 允许范围为 2. 5~3. 5。

    (2) 当寻找到有直线穿过位置探测图形时, 记录下位置探测图形的外边缘相遇的第一点和最后一点 A 和 B。 由 A、 B 两点为端点的线段称为扫描线段。将扫描线段保存下来。

    在这里插入图片描述

    用相同的方法, 完成图像中所有水平方向的扫描。

    1. 在 Y 方向, 使用相同的方法, 进行垂直扫描, 同样保存扫描得到的扫描线段。

    扫描线段分类扫描步骤获得的扫描线段是没有经过分类的, 也就是对于特定的一条扫描线段, 无法获知其具体对应于三个位置探测图形中的哪一个。 在计算位置探测图形中心坐标之前, 要将所有的扫描线段按照位置进行归类。 一般采用距离邻域法进行扫描线段的分类。

    距离邻域法的思想是: 给定一个距离阈值 dT, 当两条扫描线段的中点的距离小于 d T 时, 认为两条扫描线段在同一个邻域内, 将它们分为一类, 反之则归为不同的类别。

    距离邻域法的具体步骤如下:
    (1) 给定一个距离阈值 dT , d T要求满足以下条件: 位于同一个位置探测图形之中的任意两点之间的距离小于 dT , 位于不同位置探测图形中的任意两点之间的距离大于 d T
    (2) 新建一个类别, 将第 1 条扫描线段归入其中。
    (3) 对于第 i 条扫描线段 l i (2≤i≤n), 做以下操作:

    a) 求出 l i 的中点 C i 。

    b) 分别计算C i与在已存在的每一个类别中的第一条扫描线段的中点的距离d,若 d<d T , 则直接将 l i 加入相应类别中。

    c) 若无法找到 l i 可以加入的类别, 则新建一个类别, 将 l i 加入其中。

    (4) 将所有类别按照包含扫描线段的数目进行从大到小排序, 保存前 3 个类别(即
    包含扫描线段数目最多的 3 个类别), 其余的视为误判得到的扫描线段(在位置探测图形以外的位置得到的符合扫描特征的扫描线段), 直接舍去。距离邻域法结束后得到的分好 3 个类别的扫描线段就分别对应了 3 个位置探测图形。距离邻域法的关键就是距离阈值的选取。 一般对于不同大小的 QR 码图像, 要使用不同的距离阈值。

    (1) 在 X 方向的扫描线段中找出最外侧的两条, 分别取中点, 记为 A、 B。 由 A、 B两点连一条直线。
    在这里插入图片描述

    (2) 在 Y 方向的扫描线段中找出最外侧的两条, 分别取中点, 记为 C、 D。 由 C、 D两点连一条直线。
    在这里插入图片描述

    (3) 计算直线 AB 与直线 CD 的交点 O, 即为位置探测图形中心点。

    在这里插入图片描述

    将 QR 码符号的左上、 右上位置探测图形的中心分别记为 A、 B。 连接 A、 B。 直线 AB 与水平线的夹角α 即为 QR 码符号的旋转角度。

    在这里插入图片描述
    对于该旋转角度α , 求出其正弦值 sinα 与余弦值 cosα 即可。 具体计算公式如下:
    在这里插入图片描述

    在这里插入图片描述

    位置探测图形边长的计算是基于无旋转图像的, 在无旋转图像中, 水平扫描线段的长度即为位置探测图形的边长。

    水平扫描线段 AB 的长度即为位置探测图形的边长 X。

    在这里插入图片描述

    对于经过旋转的 QR 码图像, 先通过插值算法生成旋正的 QR 码图像, 然后按照如上所述的方法进行位置探测图形边长的计算

    识别测试结果

    在这里插入图片描述

    6 最后

    技术解答
    毕设帮助:<Q>746876041
    

    在这里插入图片描述

    展开全文
  • Java二维码编码识别

    2021-07-28 14:10:37
    二维码原理 将String转成char 将char转成二进制码 补码 存储 在界面上画出二维码 二维码原理 二维码图像存储的信息属于字符信息,如果信息少,黑白块数量也少,反之就同理。 我们用二进制01 来表示成它的...

    目录

    二维码原理

    将String转成char

    将char转成二进制码

    补码

    存储

    在界面上画出二维码


    二维码原理

    二维码图像存储的信息属于字符信息,如果信息少,黑白块数量也少,反之就同理。

    我们用二进制01 来表示成它的信息码

    字符型char 在java占2byte,16bit 

    0000 0000 0000 0000 -字符

    public class StringTest {
               
    	    public static void main(String[] args) {
    	    	char c = 'A';
    	    	System.out.println(c);
    	    	char x = 100;// 100 = d ASCII 字符编码
    	    	System.out.println(x);
    	    	
    	    	char g = 33;
    	    	System.out.println(g);
    	    	
    	    	int count = 0;
    	    	//打印 一万个字符
    	    	for(char i = 20000;i<30000;i++) {
    	    		count++;
    	    		if(count == 30) {
    	    			System.out.println();
    	    			count = 0;
    	    		}
    	    		System.out.print(i);
    	    	}
    	    }
    }

    将String转成char

    //将String 转成char
             public static void main (String[] args) {
            	 String str = "http://www.bilibili.com";
            	 int strlenght = str.length();
            	 
            	 int[][] binaryArr = new int[strlenght][8];
            	 
            	 for(int i = 0;i<strlenght;i++) { 
            		 char c = str.charAt(i);
            		 System.out.println(c);

    将char转成二进制码

    //将char转成二进制码
                	 //integer 将字符转二进制码
                	 String cbinarycode = Integer.toBinaryString(c);
                	 System.out.println(cbinarycode);

    补码

     //获取二进制码编码长度
                	 int cbinaryCodeLenght = cbinarycode.length();
                	 //在前补码0 直到长度为8
                	 while(cbinaryCodeLenght < 8 ) {
                		 cbinarycode = "0"+cbinarycode;
                		 cbinaryCodeLenght++;
                	 }
                	 System.out.println(cbinarycode);

    存储

     int[][] binaryArr = new int[strlenght][8];
    
    // 将  补好二进制码 存储起来
                	 // 声明二维数组
                	 
                	 for(int j = 0;j<cbinaryCodeLenght;j++) {
                		 binaryArr[i][j] = cbinarycode.charAt(j);
                	 }
            	 }
            	 
            	 
            	 //test
            	 System.out.println("二进制矩阵");
            	 for(int i = 0;i<strlenght;i++) {
            		 for(int j = 0;j<8;j++) {
            			 System.out.print(binaryArr[i][j]);
            		 }
            		 System.out.println();
            	 }

    在界面上画出二维码

    StringUI

    import java.awt.Color;
    import java.awt.Graphics;
    
    import javax.swing.JFrame;
    
    public class StringUI extends JFrame{
               public void initUI() {
            	   JFrame jf = new JFrame();
            	   jf.setTitle("字符串二维码");
            	   jf.setSize(900,700);
            	   jf.setLocationRelativeTo(null);
            	   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            	   jf.setVisible(true);
               }
              
               public void paint(Graphics g) {
            	   super.paint(g);
            	   g.setColor(Color.blue);
            	   g.fillRect(0, 0, this.getWidth(), this.getHeight());
            	   QRCode qrCode = new QRCode();
               int[][] arr = qrCode.staringToBinary("");
               //将转成
               for(int i = 0;i<arr.length;i++) {
            	   for(int j = 0;j<arr[i].length;j++) {
            		   int num = arr[i][j];
            		   if(num == 48) {
            			   g.setColor(Color.white);        			   
            		   }else {
            			   g.setColor(Color.black);
            		   }
            		   g.fillRect(100+i*10, 100+j*10, 10, 10);
            	   }
               }
               }
               public static void main(String[] args) {
            	   StringUI su = new StringUI();
            	   su.initUI();
               }
    }

    QRCode

    public class QRCode {
    	//将String 转成char
             public  int[][] staringToBinary(String codeStr) {
            	 String str = "http://www.bilibili.com";
            	 int strlenght = str.length();
            	 
            	 int[][] binaryArr = new int[strlenght][8];
            	 
            	 for(int i = 0;i<strlenght;i++) {
            		 char c = str.charAt(i);
            		 System.out.println(c);
            		 
            		 //将char转成二进制码
                	 //integer 将字符转二进制码
                	 String cbinarycode = Integer.toBinaryString(c);
                	 System.out.println(cbinarycode);
                	 
                	 //获取二进制码编码长度
                	 int cbinaryCodeLenght = cbinarycode.length();
                	 //在前补码0 直到长度为8
                	 while(cbinaryCodeLenght < 8 ) {
                		 cbinarycode = "0"+cbinarycode;
                		 cbinaryCodeLenght++;
                	 }
                	 System.out.println(cbinarycode);
                	 
                	 // 将  补好二进制码 存储起来
                	 // 声明二维数组
                	 
                	 for(int j = 0;j<cbinaryCodeLenght;j++) {
                		 binaryArr[i][j] = cbinarycode.charAt(j);
                	 }
            	 }
            	 
            	 
            	 //test
            	 System.out.println("二进制矩阵");
            	 for(int i = 0;i<strlenght;i++) {
            		 for(int j = 0;j<8;j++) {
            			 System.out.print(binaryArr[i][j]);
            		 }
            		 System.out.println();
            	 }
            	 return binaryArr;
             }
    }

    展开全文
  • 通过查资料发现,QRCode.js 是一个用于生成二维码的 JavaScript 库。主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库,qrcode这个库只通过前端就能生成二维码和解析二维码图片。 ...
  • 1. 快速集成扫码二维码识别二维码功能。经过加工处理优化的,直接返回扫码结果字符串和图片的bitmap数据。 直接上代码: package com.xinxinchelian.myscanzxing; import android.Manifest; import android....
  • 二维码的分类 线性堆叠式二维码 矩阵式二维码 二维码的优缺点 优点 信息容量大 编码范围广 容错能力强 译码可靠性高 可引入加密措施 成本低,易制作 缺点 二维码技术...
  • zxing扫描二维码还可以,但是识别本地图片二维码功能效果太差,非常不理想,看了看多github很多zxing扩展的开源项目,识别本地图片二维码功能效果不乐观,有些甚至还有裁剪本地图片,还是不能识别,果断放弃 ...
  • 企业微信 ...二维码测试</text> <image style="width: 200px; height: 200px;" src="{{url}}" show-menu-by-longpress="{{true}}"></image> </view> index.js Page({ data:
  • uniapp二维码识别

    千次阅读 2021-02-22 16:48:11
    uni.scanCode({ onlyFromCamera: true, success: function (res) { console.log('条码类型:' + res.scanType); console.log('条码内容:' + res.result); // 跳转提示页面==>请求数据(成功)==>...
  • 偶然发现,二维码贴在圆柱面或其他曲面时,扫描不上,扫描不出来的原因跟曲面二维码扭曲,导致定位点距离偏差有关。 解决思路: 方法一: 扫描的时候,二维码截图以纵向中心线为基准向两侧,越远越密集(大概是这...
  • 1.需要使用img 标签,不能使用background-image 2.看默认点击穿透,触摸样式是否被覆盖,可在img标签下css增加如下样式进行尝试 img{ -webkit-user-select:none; -webkit-touch-callout:unset;...}
  • 一、检测图片中的二维码/条形码 # 检测图像中的码(解码) def Read_Decode_Pic(): img = cv2.imread('Resource/qrcode.jpg') # 遍历解码 for code in decode(img): print("条形码/二维码:", code) print(...
  • openmv二维码识别,颜色识别
  • 使用android studio 生成 扫描二维码app,简单粗暴好用 自己白天找了一上午代码也没找到 ,然后用了个github包 写了个简单的 下面上图 首先使用android studio创建一个空白项目,这里不多讲了 不会的小伙伴可以...
  • 由此可以看出,uni-app自带api在h5平台时是不能调用uni.scanCode的,那么非h5平台实现二维码扫描识别方法: uni.scanCode({ success(res) { _this.tempImgUrl = res.path _this.isChooseI...
  • 树莓派二维码识别

    2021-04-14 20:24:23
    1.1 二维码简介 二维码(2-dimensional bar code) 的黑白相间的图形记录数据...既然识别二维码,那么二维码是如何制作的呢。那么接下来教大家制作属于自己的二维脑采用生成二维码:采用草料二维码制作属 片的顺序即可。
  • Gravity:环形二维码扫描识别传感器是DFRobot新出品的一款高集成、性能优良的二维码识别传感器,外形小巧,可以识别通用的一维码跟二维码,采用Gravity接口,接线更方便,传感器自带七彩指示灯,通过指示灯的颜色...
  • python zxing 二维码识别

    2021-07-13 09:32:43
    python 调用zxing 进行二维码识别 zxing 本是java的二维码识别包,python要调用zxing就需要java的环境,java可以自己百度安装,不做过多介绍。 python需要的模块安装 pip install jpype # python调java的包 pip ...
  • 复杂环境下的二维码识别写在前面二维码了解二维码二维码识别库图像处理Opcv使用OpenCVSharp使用的一些坑图像处理后的二维码识别物理图像处理法通用处理方式《光照不均 QR 二维码图像的高效处理方法研究》写在结尾...
  • 华为SDK二维码识别

    2021-05-07 01:32:29
    项目需要使用扫码二位码,看人家产品为啥识别那么快,Android zxing库如何优化,又要改项目进度我难道需要加班帮老板搞项目,啊 不想加班。。。想不加班又能用上和大厂一样的二维码识别...
  • 一、安装python3的opencv库 安装opencv的一些依赖 sudo apt-get install libcblas-dev sudo apt-get install libhdf5-dev sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev ...
  • 基于MATLAB的条码二维码识别系统课题介绍 本设计研究的是基于数字图像处理的EAN-13条形码识别算法,通过工具平台MATLAB实现。其中图像处理部分是条码识别重要的前期工作,利用MATLAB强大的图象处理工具箱实现图像的...
  • 最近尝试着将深度学习技术引入到二维码检测和识别中,期望能够提升传统二维码的识读性能,能够适用更多复杂背景,并且最终应用到工业生产中,方便生产线上对产品的ID管理。 项目最终实现效果如下所示: ...
  • GitHubhttps://github.com/robin-ming/QrCodeScan 谷歌浏览器插件安装方式https://zhuanlan.zhihu.com/p/137645001
  • 使用Zbar 进行二维码识别并定位

    千次阅读 2021-01-14 10:51:49
    二维码定位识别开源的方法,测试两个opencv 和Zbar ,opencv 效果还有很大的提升空间,尤其是普通监控复杂背景下基本上就定位不到二维码,简单分析原因是在整张图上二值化后二维码被吃掉了,处理时间也比较长,我的...
  • 通过Java使用opencv识别二维码

    千次阅读 2021-05-11 19:45:40
    OpenCV的全称是Open Source Computer Vision Library,它是一个跨平台...本文将介绍如何使用OpenCV与Java语言进行二维码识别。 OpenCV的安装 目前OpenCV最新的版本是4.5.2,根据所在平台不同,OpenCV有多种安装方式。
  • 最近接触到一些需求需要进行二维码识别并且显示出链接地址,找了许多发现有的要么写的很啰嗦,看的云里雾里。也有其他的教程显示的并不是打印出链接,经过一山又一城的搜索,哈哈哈哈哈,然后就发现其实可以这么简单...
  • 机器视觉绕不开二维码识别,因为需要将生产中的数据识别出来,然后传输到MES系统。 Halcon识别二维码步骤总结。 Halcon已经封装好了算子,只要是下面两个算子,直接使用就行,非常方便。 核心步骤,就是下面三个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,569
精华内容 31,827
关键字:

二维码是怎么识别的