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

Opencv学习项目6——pyzbar

在之前我们学习了解码图片中的二维码,这次我们开启摄像头来解码视频中二维码

开启摄像头

# 打开摄像头
cap = cv2.VideoCapture(0)
cap.set(3, 640)  # 设置摄像头画面宽度
cap.set(4, 480)  # 设置摄像头画面高度

我使用的是笔记本上的摄像头来进行的,如果你们使用其他摄像头,可以根据需要调整

读取授权数据

首先我们要先创建一个授权文件,如mydata.txt,在里面写入我们授权的数据,如Armitage,这样在我们后面读取到二维码时,可以根据数据来进行不同的操作

# 从文件中读取授权数据
with open('mydata.txt') as f:mydataList = f.read().splitlines()
print("Authorized data loaded:", mydataList)

 使用 read().splitlines() 方法读取其中的数据,以列表形式存储在 mydataList 变量中

授权判断

# 判断二维码数据是否在授权列表中if mydata in mydataList:myout = 'Authorized'mycolor = (0, 255, 0)  # 绿色表示授权else:myout = 'Un-Authorized'mycolor = (0, 0, 255)  # 红色表示未授权

检查 mydata 是否在 mydataList 中,确定是否为授权数据,并相应地设置显示文本和矩形框颜色。

代码实现

import cv2
from pyzbar.pyzbar import  decodecap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,320)with open('mydata.txt') as f:mydataList = f.read().splitlines()
print("Authorized data loaded:", mydataList)while True:# 读取摄像头图像success, img = cap.read()# 解码图像中的二维码for barcode in decode(img):mydata = barcode.data.decode()print("Decoded data:",mydata)# 判断是否为授权数据if mydata in mydataList:myout = 'Authorized'mycolor = (0,255,0)else:myout = 'Un-Authorized'mycolor = (0, 0, 255)# 获取条形码的矩形边界rect = barcode.rect# 绘制矩形边界框cv2.rectangle(img, (rect.left, rect.top), (rect.left + rect.width, rect.top + rect.height),mycolor, 3)cv2.putText(img, mydata, (rect.left, rect.top +180), cv2.FONT_HERSHEY_COMPLEX, 0.8, mycolor, 2)cv2.putText(img, myout, (rect.left,rect.top  - 10), cv2.FONT_HERSHEY_COMPLEX,0.8, mycolor, 2)cv2.imshow('Result', img)# 检测按键事件,按下 q 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break
# 释放资源
cap.release()
cv2.destroyAllWindows()

效果实现

 这样就完成了检测QR码是否在授权文件中,有兴趣的可以关注一下,谢谢

相关文章:

  • Linux 静态库和动态库
  • 思考如何学习一门编程语言?
  • 实习总结 --- 内部平台使用
  • 【聊聊原子性,中断,以及nodejs中的具体示例】
  • 通过MATLAB控制TI毫米波雷达的工作状态
  • react18.x+播放文本内容
  • Appium adb 获取appActivity
  • Laravel swagger接口文档生成和管理
  • 数据结构与算法—空间复杂度详解与示例(C#,C++)
  • 【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现
  • Halcon机器视觉定位--模板匹配
  • Android启动时间分析
  • 7.2总结
  • 计算机相关术语科普之什么叫网关(Gateway)
  • llama3模型部署时遇到的问题及解决方案
  • 【Leetcode】104. 二叉树的最大深度
  • Android交互
  • C++入门教程(10):for 语句
  • CSS 提示工具(Tooltip)
  • exports和module.exports
  • flutter的key在widget list的作用以及必要性
  • Git同步原始仓库到Fork仓库中
  • Git学习与使用心得(1)—— 初始化
  • Javascript编码规范
  • Laravel5.4 Queues队列学习
  • nginx 负载服务器优化
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Swoft 源码剖析 - 代码自动更新机制
  • unity如何实现一个固定宽度的orthagraphic相机
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 解决iview多表头动态更改列元素发生的错误
  • 马上搞懂 GeoJSON
  • 入手阿里云新服务器的部署NODE
  • 我建了一个叫Hello World的项目
  • 原生Ajax
  • HanLP分词命名实体提取详解
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​力扣解法汇总946-验证栈序列
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #Linux(Source Insight安装及工程建立)
  • #window11设置系统变量#
  • $().each和$.each的区别
  • $refs 、$nextTic、动态组件、name的使用
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2)STL算法之元素计数
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (南京观海微电子)——I3C协议介绍
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)甲方乙方——赵民谈找工作