当前位置: 首页 > news >正文

opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别

1.二维码的生成

废话不多说,直接上代码

# 生成二维码
import qrcode# 二维码包含的示例数据
data = "B0018"
# 生成的二维码图片名称
filename = "qrcode.png"
# 生成二维码
img = qrcode.make(data)
# 保存成图片输出
img.save(filename)img.show()

运行效果:

会在当前目前生成一张图片
在这里插入图片描述

对生成的二维码识别

opencv从4代之后推出了二维码识别接口.调用方法是这样的.代码如下:

import cv2img = cv2.imread('qrcode.png')
qrcode = cv2.QRCodeDetector()
result, points, code = qrcode.detectAndDecode(img)print(result)

运行结果:

B0018

返回值有三个,

  • 第一个result就是解码后的内容,例如我这个二维码的结果是"B0018",当然也可以是个纯数字.

  • 第二个points是二维码轮廓的四个角,从左上角顺时针转的.

  • 第三个code是二维码的原始排列,也就是每个点是0还是255的一个矩阵.白色是255,黑色是0.调用起来十分方便,而且如果不需要解码,只是想定位的话可以调用detect函数,返回结果就只有四个角点了.

如果是一个大图中的一个二维码识别呢?比如下面的这个图
在这里插入图片描述

如果继续使用上面的识别二维码是识别不出来的。

下面我们看下二维码的原理及定位原理

二维码的结构与基本原理

标准的二维码结构如下:

在这里插入图片描述
特别要关注的是图中三个黑色正方形区域,它们就是用来定位一个二维码的最重要的三个区域,我们二维码扫描与检测首先要做的就是要发现这三个区域,如果找到这个三个区域,我们就成功的发现一个二维码了,就可以对它定位与识别了。

二维码其它各个部分的说明如下:

在这里插入图片描述
三个角上的正方形区域从左到右,从上到下黑白比例为1:1:3:1:1。

在这里插入图片描述
不管角度如何变化,这个是最显著的特征,通过这个特征我们就可以实现二维码扫描检测与定位。

除了上面的qrcode 包可以识别二维码外,还有pyzbar 包 也可以进行二维码的识别。比对下pyzbar 比qrcode 包的效率 更高。下面的代码

import cv2
import numpy as np
import time
import pyzbar.pyzbar as pyzbar# 显示条码和二维码位置
def display(im, decodedObjects):# 遍历所有已解码的对象for decodedObject in decodedObjects:points = decodedObject.polygon# 如果点不形成四边形,请找到凸包if len(points) > 4:hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))hull = list(map(tuple, np.squeeze(hull)))else:hull = points;# 凸包中的点数n = len(hull)# 绘制凸包for j in range(0, n):cv2.line(im, hull[j], hull[(j + 1) % n], (255, 0, 0), 3)
# 创建一个 qrCodeDetector 对象
qrDecoder = cv2.QRCodeDetector()# 检测和解码二维码
t = time.time()
inputImage = cv2.imread("66.jpg")decodedObjects = pyzbar.decode(inputImage)
if len(decodedObjects):zbarData = decodedObjects[0].data
else:zbarData = ''if zbarData:cv2.putText(inputImage, "result : {}".format(zbarData.decode()), (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1,(0, 255, 0), 2, cv2.LINE_AA)
else:cv2.putText(inputImage, "ZBAR : QR Code NOT Detected", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2,cv2.LINE_AA)display(inputImage, decodedObjects)print("Time Taken for Detect and Decode : {:.3f} seconds".format(time.time() - t))
cv2.imshow("Result", inputImage)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果:

在这里插入图片描述

从结果中可以看出可以定位到二维码的位置并将 识别的结果显示在左上角。

相关文章:

opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别

1.二维码的生成 废话不多说,直接上代码 # 生成二维码 import qrcode# 二维码包含的示例数据 data "B0018" # 生成的二维码图片名称 filename "qrcode.png" # 生成二维码 img qrcode.make(data) # 保存成图片输出 img.save(filename)img.sh…...

叠螺式污泥脱水机的要点及价格分析

诸城市鑫淼环保小编带大家了解一下叠螺式污泥脱水机的要点及价格分析 设备工作步骤 叠螺脱水机在工作时分为3个步骤,分别是稀释、脱水、自洗濯: 1、稀释:当螺旋推进轴迁移转变时,设在推进轴核心的多重固活叠片挪动,在重…...

Visual Studio中Linux开发头文件intellisense问题的解决办法

文章目录 前言个人环境 SSH到WSL复制文件后记 前言 最近在用我心爱的Visual Studio配合WSL2做一些Linux开发&#xff0c;但是有一个问题&#xff0c;就是当我#include <sys/socket.h>&#xff0c;会提示找不到文件 我尝试了各种姿势&#xff0c;包括修改CMakeSettings.…...

如何以CPU方式启动Stable Diffusion WebUI?

默认情况下Stable Diffusion WebUI采用GPU模式运行&#xff0c;但是稍微运行起来就知道至少需要4G的显存&#xff0c;2G显存虽然能够通过带--lowvram运行起来&#xff0c;但是能够炼出来的图基本都是512x512的&#xff0c;不能够炼大图&#xff0c;如果你刚好和我一样家境贫寒&…...

HTTP 框架修炼之道 | 青训营

Powered by:NEFU AB-IN 文章目录 HTTP 框架修炼之道 | 青训营 走进 HTTP 协议HTTP 框架的设计与实现应用层中间件层路由设计协议层 传输层&#xff08;网络层&#xff09;1. BIO&#xff08;Blocking I/O&#xff09;:2. NIO&#xff08;Non-blocking I/O&#xff09;:区别&…...

【活动】怎么维护电脑?

无论是学习还是工作&#xff0c;电脑都是IT人必不可少的重要武器&#xff0c;一台好电脑除了自身配置要经得起考验&#xff0c;后期主人对它的维护也是决定它寿命的重要因素&#xff01; 其实这是个伪命题&#xff0c;就像穿衣一样&#xff0c;有的人喜欢干净整洁&#xff0c;…...

Linux安装Docker

文章目录 先决条件开始安装1.卸载旧版本2.安装依赖3.切换数据源4.安装Docker5.启动服务6.查看版本7.查看端口8.测试拉取镜像 同系列文章 先决条件 Linux内核版本高于3.1 开始安装 1.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \doc…...

极氪汽车的云资源治理细探

作者&#xff1a;极氪汽车吴超 前言 2021 年&#xff0c;极氪 001 迅速崭露头角&#xff0c;仅用 110 天便创下了首款车型交付量“最快破万”的纪录。2022 年 11 月&#xff0c;极氪 009 在短短 76 天内便率先完成了首批交付&#xff0c;刷新了中国豪华纯电品牌交付速度的纪录…...

设计模式之抽象工厂

文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了…...

问道管理:数字经济概念走势强劲,竞业达、久其软件等涨停,观想科技等大涨

信创、智慧政务等数字经济概念22日盘中走势微弱&#xff0c;截至发稿&#xff0c;观想科技、慧博云通涨超15%&#xff0c;竞业达、中远海科、久其软件等涨停&#xff0c;云赛智联、延华智能、汇纳科技涨约9%&#xff0c;天玑科技、安硕信息、思特奇、零点稀有涨逾7%。 音讯面上…...

14-redis

一 Redis概述 1 为什么要用NoSQL 单机Mysql的美好年代 在90年代&#xff0c;一个网站的访问量一般都不大&#xff0c;用单个数据库完全可以 轻松应付。在那个时候&#xff0c;更多的都是静态网页&#xff0c;动态交互类型的网站不多。 遇到问题&#xff1a; 随着用户数的增长…...

MySQL——基础——子查询

一、子查询 SQL语句中嵌套SELECT语句&#xff0c;称为嵌套查询&#xff0c;又称子查询 SELECT * from t1 WHERE column1 (SELECT column1 FROM t2); 子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT中任意一个 根据子查询的结果不同&#xff0c;可以分为&#xff1a; 标…...

业务系统架构实践总结

我从2015年起至今2022年&#xff0c;在业务平台&#xff08;结算、订购、资金&#xff09;、集团财务平台&#xff08;应收应付、账务核算、财资、财务分析、预算&#xff09;、本地生活财务平台&#xff08;发票、结算、预算、核算、稽核&#xff09;所经历的业务系统研发实践…...

Linux学习之DNS服务的原理

DNS服务一些理论 域名系统&#xff08;Domain Name System&#xff0c;DNS&#xff09;是互联网的核心应用服务&#xff0c;可以通过IP地址查询到域名&#xff0c;也可以通过域名查询到IP地址。 FQDN&#xff08;Full Qualified Domain Name&#xff09;是完全限定域名&#xf…...

《Linux内核源码分析》(3)调度器及CFS调度器

《Linux内核源码分析》(3)调度器及CFS调度器 文章目录 《Linux内核源码分析》(3)调度器及CFS调度器一、调度器1、调度器2、调度类sched_class结构体3、优先级4、内核调度策略 二、CFS调度器1、CFS调度器基本原理2、调度子系统各个组件模块3、CFS调度器就绪队列内核源码 一、调度…...

Docker:如何删除已存在的镜像

要删除已存在的 Docker 镜像&#xff0c;您可以使用 docker rmi 命令。 以下是完整的流程 步骤1&#xff1a;停止容器 如容器正在运行需要停止正在运行的 Docker 容器&#xff0c;您可以使用 docker stop 命令。 以下是停止容器的步骤&#xff1a; 首先&#xff0c;使用 do…...

Qt——Qt 开发中所涉及的所有控件(基本控件、容器控件、布局控件、高级控件、其他控件、多媒体控件、定制控件)

Qt 开发中所涉及的所有控件 一、基本控件 二、容器控件 三、布局控件 四、高级控件 五、其他控件 六、多媒体控件 七、定制控件 Qt开发中提供了许多控件&#xff08;Widgets&#xff09;供开发者使用&#xff0c;用于构建图形用户界面&#xff08;GUI&#xff09;应用程序。以…...

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl&#xff0c;使用apt安装即可&#xff1a;…...

vue3权限管理——(路由权限)动态路由设置

1.大概思路 设置基础路由login和home等页面&#xff1b;登录后从后端获取user,token,rights等数据&#xff0c;并将数据同时存储到vuex和sessionStorage中将后端获取的权限数据&#xff08;作为不同用户显示不同菜单及不同路由的依据&#xff09;和路由页面进行映射&#xff1…...

小程序开发之登录授权

小程序开发登录授权流程 看懂这张图登录授权就没问题了&#xff08;哈哈哈哈哈&#xff09; 说明&#xff1a; 调用 wx.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。 调用 auth.code2Session 接口&#xff0c;换取 用户唯一标识 OpenID 和 会话密钥 sess…...

Sqoop网络传输优化指南:从数据传输机制到带宽调优实战

Sqoop网络传输优化指南&#xff1a;从数据传输机制到带宽调优实战1. 引言&#xff1a;数据迁移的命脉在于网络2. Sqoop数据传输机制深度解析2.1 架构设计&#xff1a;基于MapReduce的并行传输2.2 导入数据的工作机制2.3 导出数据的工作机制2.4 网络交互的核心模式3. 优化网络带…...

手把手教你用modf()和fmod()解决C语言浮点数计算中的常见坑

深入解析C语言浮点数计算&#xff1a;modf()与fmod()的实战应用 浮点数计算在C语言开发中无处不在&#xff0c;从游戏物理引擎到嵌入式传感器数据处理&#xff0c;精确的浮点运算直接关系到程序行为的正确性。然而&#xff0c;许多开发者第一次遭遇浮点数计算误差时&#xff0c…...

别再让AI瞎忙活了!用Claude Code的SubAgent打造你的专属开发团队(附React项目实战)

别再让AI瞎忙活了&#xff01;用Claude Code的SubAgent打造你的专属开发团队&#xff08;附React项目实战&#xff09; 在软件开发的世界里&#xff0c;我们常常面临一个困境&#xff1a;要么雇佣一个庞大的团队&#xff0c;每个成员各司其职但成本高昂&#xff1b;要么依赖全能…...

vLLM-v0.17.1保姆级教程:SSH中查看vLLM实时请求队列与Pending统计

vLLM-v0.17.1保姆级教程&#xff1a;SSH中查看vLLM实时请求队列与Pending统计 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能库&#xff0c;它的设计目标是让开发者能够轻松部署和管理大规模语言模型。这个项目最初由加州大学伯克利分校的天空计算实验…...

基于springboot家庭影像管理系统设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍&#xff1a;CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

【Mojo+Python混合部署失效真相】:92%开发者忽略的编译期符号冲突、运行时上下文隔离与调试断点丢失问题

第一章&#xff1a;MojoPython混合部署失效真相全景概览Mojo 作为新兴的高性能系统编程语言&#xff0c;设计初衷是与 Python 生态无缝互操作&#xff1b;然而在真实生产部署中&#xff0c;“Mojo Python 混合部署”常出现静默失败、ABI 不兼容、运行时崩溃或性能断崖式下降等…...

OpenClaw大模型API怎么选?Kimi与DeepSeek实测指南

最适配 OpenClaw 的大模型 API 是哪个&#xff1f;四款模型实测对比与选型指南&#xff08;2026年3月&#xff09; OpenClaw 内置 ReAct Agent 架构&#xff0c;通过工具调用&#xff08;Tool Use&#xff09;驱动 Shell 执行、文件操作、浏览器控制、截图等自动化任务。模型的…...

AutoDock Vina特殊金属元素对接技术指南:从问题诊断到方案落地

AutoDock Vina特殊金属元素对接技术指南&#xff1a;从问题诊断到方案落地 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 问题溯源&#xff1a;金属元素对接的技术瓶颈 在分子对接实践中&#xff0c;科研人…...

RCLAMP0542T.TCT‌静电保护TVS 二极管阵列 SEMTECH 电子元器件IC 芯片

RCLAMP0542T.TCT‌ 是由 ‌SEMTECH‌ 公司推出的一款超低电容、双通道ESD&#xff08;静电放电&#xff09;保护 TVS 二极管阵列&#xff0c;具备0.45pF 超低电容、5A 浪涌承受能力和超小型 SLP1610P4T 封装&#xff0c;专为高速数据接口设计&#xff0c;广泛应用于通信设备、消…...

EdB Prepare Carefully:定制你的RimWorld完美开局体验

EdB Prepare Carefully&#xff1a;定制你的RimWorld完美开局体验 【免费下载链接】EdBPrepareCarefully EdB Prepare Carefully, a RimWorld mod 项目地址: https://gitcode.com/gh_mirrors/ed/EdBPrepareCarefully 是否厌倦了RimWorld随机生成的殖民者团队带来的不确定…...