1,效果展示

声明:二维码会让图片违规,我处理了一下,大家看看效果

我们扫描出来的结果会有数字,网址链接,英文等。


2,项目准备

(1)安装pyzbar

使用pip下载,打开控制面板,输入:

pip install pyzbar

(2)在此项目下建立两个.py文件,以及一个.text文件

打开DataFile.text,输入以下内容:

111111
111112
111113
111114
111115

或则输入其他内容,包括英文和数字,注意不要用中文。

(3)准备需要的二维码和条形码

二维码生成网站:

在线二维码生成器 ~ 二维工坊 (2weima.com)https://www.2weima.com/按照你写的DataFile.text里面的内容来生成二维码,可以准备几个其他内容的二维码,因为我们是在项目拓展中才会使用,亦或者使用生活中的二维码,比如,书籍,牛奶盒,微信收款码等等。

条形码生成网站:

免费在线条形码生成器 (t-x-m.com)http://t-x-m.com/条形码无所谓多少。建议大家将准备好的二维码和条形码打印到一张纸上,方便扫描,我昨天打印的不见了,所以效果展示我就用手机拍下来扫描的。

3,代码展示与讲解

import cv2
import numpy as np
from pyzbar.pyzbar import decodecap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)while True:success, img = cap.read()for barcode in decode(img):myData = barcode.data.decode('utf-8')print(myData)pts = np.array([barcode.polygon], np.int32)pts = pts.reshape((-1, 1, 2))cv2.polylines(img, [pts], True, (255, 0, 255), 5)pts2 = barcode.rectcv2.putText(img, myData, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX,0.9, (255, 0, 255), 2)cv2.imshow('Result', img)k=cv2.waitKey(1) & 0xFFif k==27:break

本次项目没什么难点,我们直接讲解一下,此项目实现的思路。先看我的分析,再去跟着敲一遍代码。


  • 首先,在本项目中不管是读取图像,还是读取摄像头都能实现,那么我们在这里是实现摄像头的实时扫描。读取网络摄像头(在效果展示中,我采用的外用摄像头),在cap.set()函数里面,用‘3’代表的是宽,用‘4’代表的是高的设置,使其窗口大小合适。
  • 其次是在while True中,success接受的是布尔值,检测是否读取成功,用img读取每一帧的图像。采取pyzbar包中的decode函数,对img进行解码,并将解码后的内容打印在控制台中,大家也可以尝试将解码的内容打印出来,看看有些什么东西。(包括barcode.rect和barcode.data)
  • 除此之外,在Opencv中绘制包围住二维码的方法有很多,比如绘制矩形、绘制多边形;如果是选择矩形框框,识别时二维码存在的倾斜角度会导致添加的框框不能跟着倾斜,而这不是我们想要的效果,因此我们需要选用绘制多边形。具体如下:

第一行使用numpy库中array函数,得到一个四点数据矩阵。其中barcode.polygon作用是从轮廓中提取polygon点,作为顶点(请看下方图一);np.int32则是对于数据的类型约束。
第二行的reshape((-1,1,2))函数,-1表示行有先,主要功能是将原有的数据形状转换为opencv中常用的形状:(x,1,y),便于使用(请看下方图二)。如将(4,2)转换为(4,1,2)。
第三行就是绘画多边形的过程,使用cv.ploylines函数,绘制了一个闭合、紫色、宽度为五的四边形。注意此次的布尔值指的是是否为闭合图型。

图一:

图二:

  • 紧接着,是放置文本框,那么我们当然不需要它移动,我们希望的是它可以固定在某一点。那么在此处我们采取了rect的方法,得到如下图所表示:

  • 最后,就是展示窗口,在此处如果想关闭窗口,点击Esc键即可,27即是Esc键的Ascll码。

4,项目拓展

项目拓展描述:

公司的员工使用工作牌扫描二维码开门的想法的实现,根据我们之前准备好的DataFile.text,以及生成的二维码,如果扫描的是DataFile.text里的内容就用绿色框和文本表示已经授权;否则,用红色框和文本表示未授权。

我们来看看它的效果是怎么样的。如下

项目实现的效果非常好,下面的代码我也不再多做讲解了,快去做起来吧!

import cv2
import numpy as np
from pyzbar.pyzbar import decodecap = cv2.VideoCapture(1)
cap.set(3, 640)
cap.set(4, 480)with open('DataFile.text') as f:myDataList = f.read().splitlines()while True:success, img = cap.read()for barcode in decode(img):myData = barcode.data.decode('utf-8')print(myData)if myData in myDataList:myOutput = 'Authorized'myColor = (0, 255, 0)else:myOutput = 'Un-Authorized'myColor = (0, 0, 255)pts = np.array([barcode.polygon], np.int32)pts = pts.reshape((-1, 1, 2))cv2.polylines(img, [pts], True, myColor, 5)pts2 = barcode.rectcv2.putText(img, myOutput, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, myColor, 2)cv2.imshow('Result', img)k = cv2.waitKey(1) & 0xFFif k == 27:break

5,项目总结与评价

本次项目中,由于我也不是很很了解reshape函数,还是查了资料才了解,对于二维码的扫描都是相当不错的,但对于条形码的扫描,在生活中的条形码没能成功,可能与摄像头有关吧。

希望你在本项目中玩的开心!!!

6,项目素材

可惜,二维码图片可能会违规,大家就自己在网站制作吧,需用自取

barcode:

Opencv项目实战:03 扫描二维码条形码相关推荐

  1. iOS 扫描二维码/条形码

    级别:★★☆☆☆ 标签:「iOS 原生扫描」「AVCaptureSession」「AVCaptureDevice」「rectOfInterest」 作者: Xs·H 审校: QiShare团队 最近做 ...

  2. Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总

    写在前面:因项目需求,需要实现二维码扫码功能,笔者测试过多种开源扫码工具,但因不跨平台.扫描速度慢等问题逐个放弃,最后选用ZBar实现功能,笔者发现ZBar扫码在跨主流手机平台.扫码速度等方面有较明显 ...

  3. Android PAD扫描枪扫描二维码条形码

    Android PAD扫描枪扫描二维码条形码 1,目前扫描条码只有通过按键触发,按下按键会发送F12的键值,可以通过监听F12键判断是否触发扫描 2,扫到的条码我们会在当前光标处显示出来,同时也发了一 ...

  4. 微信小程序扫描二维码条形码 (wx.scanCode)

    前言 在业务中遇到需要获取商品的二维码的信息返回商品的二维码信息,在调用后台的接口,首先想到用小程序的Api,wx.scanCode(Object object)获取二维码信息. 支持相机扫描或者相册 ...

  5. 微信小程序扫描二维码条形码

    wxml代码 <button class='deaBtn' bindtap='scancode'>扫描二维码</button> js代码 scancode: function( ...

  6. opencv项目7---智能识别二维码和条形码

    利用opencv和一个摄像头设备即可实现智能识别二维码和条形码,用到的都是基础的opencv知识. 二维码和条形码的照片可以去网上自行搜索. 这个项目可以有很多扩展: 1:比如做成一个公司的二维码证件 ...

  7. python扫描二维码输出内容_通过python扫描二维码/条形码并打印数据

    需提前安装好pyzbar和opencv-python库(博主的电脑安装opencv-python库比较麻烦,但大部分都不会出现该问题) 安装方法:打开命令框输入 pip install pyzbar/ ...

  8. python发票二维码条码识别_通过python扫描二维码/条形码并打印数据

    需提前安装好pyzbar和opencv-python库(博主的电脑安装opencv-python库比较麻烦,但大部分都不会出现该问题) 安装方法:打开命令框输入 pip install pyzbar/ ...

  9. ionic 扫描二维码/条形码功能

    一.安装插件@ionic-native/qr-scanne 二.page scan.ts import { Component } from '@angular/core'; import { Ion ...

  10. 个人项目总结---微信扫描二维码强制群发

    以下为自己遇到的一些问题及解决办法. 初衷 朋友告知我的一个网上的这样一个商业项目,觉得挺有意思,决定自己也去实现一下. 遇到的问题 1.最大的问题? 因为这是自己第一次自己用SSM框架去做项目,本身 ...

最新文章

  1. MongoDB的介绍和使用场景
  2. docker部署nginx并且挂载文件夹和文件
  3. oracle 获得月最后一天,oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...
  4. 学mysql是学指令吗_学习Mysql (二) 常用指令
  5. 18春《c语言》在线作业3,18春福师《C++语言程序设计》在线作业二【参考答案】...
  6. 《R语言数据分析》——3.2 聚集
  7. 新手上路必学的Python函数基础知识,全在这里了(多段代码举例)
  8. 微软开始取消 Windows 10 对 32 位系统的支持
  9. Windows域控 批量设置用户下次登录 修改密码【全域策略生效】
  10. Intellij IDEA安装与使用,完整详细。
  11. Centos7 Kubernetes(K8s) k8s 开发 单服务器部署 rocketmq
  12. 通讯工程考研考计算机专业跨度大么,通信工程专业,与自动化专业差别大吗?考研可以跨考吗?...
  13. 离散数学:幂集,生成
  14. Lab4: traps
  15. 一个JSP页面打开另外一个JSP页面并传值
  16. 一个善意的谎言拯救一个团队 (又叫沙漠中的指南针)
  17. P2393 yyy loves Maths II
  18. 记录一个使C/C++多线程无法加速计算的问题
  19. Windows Setup could not set the display language
  20. 完全用Linux编程及其后续

热门文章

  1. 模拟人生Java修改_模拟人生4 常用修改秘籍作弊码一览 修改秘籍怎么用
  2. 使用eclipse编写第一个Java程序及运行(超详细)
  3. cmd里面import不是内部外部命令
  4. 《麻省理工学院公开课:人工智能》笔记一
  5. helper java_请教问题,helper类在java中的作用。
  6. 消息传输协议-MQTT篇-QoS
  7. 解决jsp页面引入百度编辑器,出现xss漏洞
  8. chrome浏览器 Adobe Flash 版本太旧 无法播放视频解决办法
  9. 此计算机怎样连接未识别的网络连接,电脑无法连接无线网络显示未识别如何解决...
  10. 清华计算机自主招生试题,清华、北大等高校历年自主招生试题及答案汇总