二维码的目标定位

1 总体思路

第一步,寻找二维码的三个角的定位角点,需要对图片进行平滑滤波,二值化,寻找轮廓,筛选轮廓中有两个子轮廓的特征,从筛选后的轮廓中找到面积最接近的3个即是二维码的定位角点。
第二步:判断3个角点处于什么位置,主要用来对图片进行透视校正(相机拍到的图片)或者仿射校正(对网站上生成的图片进行缩放拉伸旋转等操作后得到的图片)。需要判断三个角点围成的三角形的最大的角就是二维码右上角的点。然后根据这个角的两个边的角度差确定另外两个角点的右下和左上位置。
第三步,根据这些特征识别二维码的范围。
在这里插入图片描述

2 zbar处理流程

2.1 z型扫描图像

对传入图像先进行逐行扫描,扫描路径为 Z 字型(扫描两遍,纵向也要扫),以一个像素点为增量在一行内一点一点扫描过去,并且完成滤波,求取边缘梯度,梯度阈值自适应(注:一阶差分计算阈值利于抗噪),确定边缘(注:边缘判定规则:二阶导数为零的位置是一阶时的最大值或最小值,因此认为是边缘点;对二阶导数符号发生变化的地方一定存在边缘点),转化成明暗宽度流
在这里插入图片描述

2.2 补充寻找边缘

在这里插入图片描述
在这里插入图片描述

2.3 获取宽度流

用当前边缘跟上一次保存下来的边缘相减得到一个宽度,并将其保存到扫描器结构变量scn中并将本次边缘信息保存下
之后对扫描器结构变量scn中保存下来的明暗宽度流进行处理,处理对象为当前保存下来的宽度流,通过计算各宽度之间的宽度信息提取扫码特征,依次通过几种一维码二维码的检测标准,寻找到符合标准的扫码种类
在这里插入图片描述

2.4 寻找图形中点

通过比例1:1:3:1:1对宽度流进行筛选并且据类之后求出横向纵向线段的交叉点,求出图形中点
在这里插入图片描述

2.5 仿射变换

在这里插入图片描述
仿射变换:https://www.cnblogs.com/happystudyeveryday/p/10547316.html
仿射变换(Affine Transformation) Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注:straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。)
在这里插入图片描述

3 解码阶段

3.1 功能区解码

通过仿射变换,求出了 QR 码的版本码字和模块宽度(根据三个交叉点处于同边的两个点来计算,仿射变化有单应性仿射 affine homography 和全矩阵仿射 full homography ),将所求得的所有结果进行计算和比对,最终的出 QR 码的版本结果,还需要判断求出结果数是否大于等于 7 。如果是,求得的版本信息是经过编码后的信息,版本号还需要解码;如果小于 7 ,求出来的结果即是 QR 码的版本号
之后求 QR 码的格式信息,格式信息求出来之后就是 QR 码的功能区到目前为止已全部识别并解码出结果

3.2 数据区解码

首先对对图像进行消除掩模处理,并且识别出图像中的定位图案
然后将 QR 码除去功能区之外的区域转换为 0 和 1 的比特流
使用 Reed-Solomon 纠错算法对提取出来的比特流进行校验和纠错,最后输出最终的识别比特流。
对求出的比特流进行分析判断,判断当前 QR 码属于什么编码模式,找到相应的编码模式后对比特流进行解码输出,最终求得 QR 码的解码结果。
在这里插入图片描述

4 代码实现

1.先通过opencv读取视频流中的帧,并将图片转换为灰度图(大概率彩色图片检测不到二维码)
​ 2.再将灰度图通过pyzbar库中的decode函数进行译码操作,得到二维码的信息,类型,坐标,宽度,高度,以及四个顶点的坐标获取信息如下:
[Decoded(data=b’http://weixin.qq.com/r/vnW_pi3EcnANrWnF9yCs’, type=‘QRCODE’, rect=Rect(left=283, top=179, width=124, height=124), polygon=[Point(x=283, y=179), Point(x=283, y=303), Point(x=407, y=303), Point(x=407, y=179)])]
3.由于一个画面中可能有多个二维码,所以进行遍历。在每次遍历中提取二维码的边界框的位置以及二维码数据 注:数据为字节对象,所以如果我们想在输出图像上画出来,就需要先将它转换成字符串,最后将边框和信息在视频流中显示出来
在这里插入图片描述

5 参考资料

python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容
二维码的特征定位和信息识别
边缘梯度
二维码(QR code)基本结构及生成原理
zbar源码分析–QR解码过程分析
Zbar算法流程介绍
仿射变换(Affine Transformation)
pyzbar的github主页:https://github.com/NaturalHistoryMuseum/pyzbar
pyzbar的pypi主页:https://pypi.org/project/pyzbar/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乌班图服务器系统升级,将Ubuntu服务器升级至14.04LTS版本的方法

Ubuntu 14.04 LTS 已经出来了,我要如何(怎样)升级到Ubuntu 14.04 LTS版本呢?我们可以从镜像或者主要发型版本来升级到最新版本1.备份Ubuntu服务器上的重要数据做好备份。因为文章大部分操作要通过root执行,可能会造成无法挽回的损失。输入下面…

mac 上传ftp服务器文件夹权限,mac 访问 ftp服务器文件夹权限

mac 访问 ftp服务器文件夹权限 内容精选换一换在“云服务器列表”页,单击下拉按钮展开会话列表,查看会话连接状态,出现“关闭应用失败”的异常。将鼠标移动至“关闭应用失败”处,查看具体的失败原因,并根据表1进行故障…

以毒攻毒Fight Fire with Fire: Towards Robust Recommender Systems via Adversarial Poisoning Training论文解读

1 摘要 最近的研究表明,推荐系统是脆弱的,攻击者很容易将精心设计的恶意配置文件注入系统,从而导致有偏见的推荐。我们不能否认这些数据的合理性,因此建立一个强大的推荐系统势在必行。对抗性训练已被广泛研究以获得可靠的建议。…

Federated learning论文修改2021-11-14(X-Y Liang)

1、结论部分 (1)你做什么,得到什么结果。(5句话) (2)未来还要做什么样工作 2、每个section前面有一段引入文字 3、重要的符号,符号系统最重要的作用是保持后面的一致性。 4、Figu…

redis延迟队列 实现_灵感来袭,基于Redis的分布式延迟队列

一、延迟队列延迟队列,也就是一定时间之后将消息体放入队列,然后消费者才能正常消费。比如1分钟之后发送短信,发送邮件,检测数据状态等。二、Redisson Delayed Queue如果你项目中使用了redisson,那么恭喜你&#xff0c…

MNTD论文修改20211114(Y Zhou)

2 Preliminaries 2.1 Network traffic detection 2.2 Multi-instance learning 1、5-10句,一个句子15-25个单词。 2、 Results show that our algorithm is more efficient while maintains good accuracy. And, the influence of packet size and the ratio …

opencv2 取二进制数据_百亿数据量下,掌握这些Redis技巧你就能Hold全场

程序猿DD一、Redis封装架构讲解实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面。这里可以打开看一下,NewLife.Core里面有一个NewLife.Caching的命名空间,里面有一…

MV-LDL论文修改20211115(B-Y Rong)

1、摘要 8-10句,每句话15-25个单词 (1)我们的研究领域。。。 (2)已有的工作。。。 (3)有什么缺点。。。(motivation) (4)In this paper … &#…

python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)

Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下。数字数据类型存储数值。他们是不可改变的数据类型,这意味着改变数字数据…

NSA-LDL论文修改建议20211116(R-T Bai)

1、每一个部分应该有引入 This section first reviews the definition of the rating system. Second, we present the problem statement for collaborative filtering (CF). Finally, we analyze existing approaches for estimating MGBR. 2、the basic statistics of the 1…

python urllib发送post请求_python爬虫 urllib模块发起post请求过程解析

urllib模块发起的POST请求案例:爬取百度翻译的翻译结果1.通过浏览器捉包工具,找到POST请求的url针对ajax页面请求的所对应url获取,需要用到浏览器的捉包工具。查看百度翻译针对某个字条发送ajax请求,所对应的url点击clear按钮可以…

通过一个例子来理解二维码纠错机制

1 例子 假设:原始数据为8位,纠错码为6位,原始信息由原始数据纠错码。 在传输过程中,由于信息干扰等原因,导致原始信息被污染,被污染后有两位数据被修改。 说明编码原始信息001010011011100被污染后的信息…

two sum python_Python | Leetcode 之 Two Sum

说来惭愧,到现在才开始刷Leetcode,但迟到总比不到好。题目:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution,…

Data Poisoning Attacks to Deep Learning Based Recommender Systems论文解读

1 摘要 在这项工作中,作者对基于深度学习的推荐系统的数据中毒攻击进行了首次系统研究。攻击者的目标是操纵推荐系统,以便向许多用户推荐攻击者选择的目标项目。为了实现这一目标,作者将精心设计的评分注入到推荐系统中的假用户。具体来说&a…

python爬虫视频 下载 黑马_Python爬虫能爬视频么(python爬虫零基础视频教程)

Python爬虫能爬视频么他视频没有的,但是跑了之后你要处理这个视频,就是问题的?你只需要,得到视频的播放地址,还是要把视频完整的下载到本地的。如果只是爬那个视频的下载地址,很简单,如果要下载…

机器学习+深度学习相关课程地址总结

1 吴恩达老师 机器学习课程视频链接:https://www.bilibili.com/video/BV164411b7dx?fromsearch&seid8357728122787183773&spm_id_from333.337.0.0作业答案:https://github.com/Ayatans/Machine-Learning-homework深度学习课程:吴恩…

黑马商城项目源代码_Python学习路线图--Python框架与项目

Python学习路线图的Python框架部分主要有Django框架和Flask框架,学完这一部分就可以去找Web全栈工程师的工作了,独立开发前端和后端业务。Python学习路线图的Django框架部分需要掌握Web主流框架-Django的使用;可根据Web框架设计,开…

Membership Inference Attacks Against Recommender Systems论文解读

0 摘要 推荐系统通常针对高度敏感的用户数据进行训练,因此推荐系统潜在的数据泄露可能会导致严重的隐私问题。 本文首次尝试通过成员推理的角度来量化推荐系统的隐私泄漏。 与针对机器学习分类器的传统成员推理相比,本文的攻击面临两个主要差异。 首先&…

python分类预测降低准确率_十分钟掌握python机器学习特征选择

十分钟掌握python机器学习特征选择-1.jpg (33.2 KB, 下载次数: 0)2018-6-26 23:01 上传在机器学习中,特征选择是实践中的一步, 帮你在所有特征中选择对结果贡献最多的特征。 显然, 使用不相关数据会减少模型的精确性,尤其是线性算…

k近邻推荐用到的各种距离

1 kkk-近邻推荐原理 2 各种距离 2.1 欧几里得距离 d12(x1−x2)2(y1−y2)2d_{12} \sqrt{(x_{1} - x_{2})^2 (y_{1} - y_{2})^2}d12​(x1​−x2​)2(y1​−y2​)2​ 缺点:欧式距离是一种常用的距离度量,但它并不是尺度不变的,这意味着所计算…