首页 > Python资料 博客日记
数字图像处理二维码识别python+opencv实现二维码实时识别
2024-05-23 21:00:06Python资料围观249次
数字图像处理二维码识别
python+opencv实现二维码实时识别
特点:
(1)可以实现普通二维码,条形码;
(2)解决了opencv输出中文乱码的问题
(3)增加网页自动跳转功能
(4)实现二维码实时检测和识别
代码保证原创、无错误、能正常运行(如果电脑环境配置没问题)
送二维码识别完整说明报告,包括识别原理,识别流程,实验过程中一些细节的问题。
数字图像处理二维码识别——基于Python和OpenCV的实现方案
随着数字化时代的到来,二维码的应用越来越广泛,以至于二维码已经成为人们生活中的一种基本元素。二维码识别技术在图像识别领域起着非常重要的作用,本文将围绕数字图像处理二维码识别展开讨论,介绍基于Python和OpenCV的实现方案,包括实现普通二维码、条形码的识别,解决OpenCV输出中文乱码的问题,增加网页自动跳转功能,实现二维码的实时检测和识别。本文的代码保证原创、无错误、能正常运行(如果电脑环境配置没问题),并且送二维码识别完整说明报告,包括识别原理、识别流程、实验过程中一些细节的问题。
一、数字图像处理二维码识别的原理与流程分析
首先,我们需要了解数字图像处理二维码识别的原理与流程。通常情况下,二维码的识别过程需要经过预处理、二值化、定位、校正、解码等多个步骤。以下是数字图像处理二维码识别的基本流程:
1.读取图像:将原始图像读取到内存中。
2.预处理:对图像进行预处理,如去噪、平滑等操作,以便提高后续处理的准确性和速度。
3.二值化:将图像转换为二值(黑白)图像,使得识别效果更佳。
4.定位:在二值图像中定位二维码的位置和方向。
5.校正:将二维码图像旋转至正确的角度,以便后续解码。
6.解码:对二维码进行解码,得到其中包含的信息。
二、Python+OpenCV实现的二维码识别方案
现在,我们将会介绍一种基于Python和OpenCV的实现方案,实现普通二维码、条形码的识别,解决OpenCV输出中文乱码的问题,增加网页自动跳转功能,实现二维码实时检测和识别。具体实现过程如下:
1.导入必要的库
首先,我们需要导入必要的库,包括cv2(OpenCV)、numpy、zxing(二维码识别库)。
import cv2
import numpy as np
from zxing import *
2.读取图像
将要处理的图像读取到内存中。
cap = cv2.VideoCapture(0)
此处设置cap为默认摄像头设备,也可以设置为视频文件路径,以进行图像的读取。
3.处理图像
在读取到图像之后,需要对图像进行预处理和二值化操作,以便提高后续处理的准确性和速度。我们使用OpenCV中的Canny算法进行边缘检测,然后对其进行膨胀处理。
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200, 3)
kernel = np.ones((3, 3), np.uint8)
edges = cv2.dilate(edges, kernel)
4.定位二维码
在得到二值图像之后,我们需要定位二维码的位置和方向。这里我们使用OpenCV中的霍夫变换进行直线检测,得到二维码的位置和方向,并进行透视变换得到一个矩形区域。
lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)
if lines is not None:
for rho, theta in lines[0]:
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
pts1 = np.float32([[x1, y1], [x2, y2], [x2, y2], [x1, y1]])
pts2 = np.float32([[0, 0], [300, 0], [300, 300], [0, 300]])
M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(frame, M, (300, 300))
5.识别二维码
在得到矩形区域之后,我们需要对其进行解码。这里我们使用zxing库进行二维码识别。首先,我们需要将矩形区域中的图像转换为灰度图像,然后将其转换为zxing库中的BinaryBitmap格式。最后,我们解码得到其中包含的信息,并在图像上显示出来。如果二维码中包含网址,则可以在程序中打开默认浏览器,并根据识别出来的网址进行跳转。
reader = BarCodeReader()
gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
rows, cols = gray.shape
raw = gray.tobytes()
binary = BinaryBitmap(GlobalHistogramBinarizer(MemoryLuminanceSource(raw, cols, rows)))
try:
result = reader.decode(binary)
cv2.putText(frame, result.raw, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)
if result.raw.startswith("http"):
webbrowser.open(result.raw, new=2)
except Exception as e:
pass
6.解决输出中文乱码的问题
在程序中,我们还需要解决OpenCV输出中文乱码的问题。此处,我们可以使用cv2.putText()函数进行保证。
cv2.putText(frame, "Press 'q' to quit", (10, 470), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
三、完整代码
本文所提供的完整代码如下。
import cv2
import numpy as np
from zxing import *
import webbrowser
def qr_code():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200, 3)
kernel = np.ones((3, 3), np.uint8)
edges = cv2.dilate(edges, kernel)
lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)
if lines is not None:
for rho, theta in lines[0]:
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
pts1 = np.float32([[x1, y1], [x2, y2], [x2, y2], [x1, y1
相关代码,程序地址:http://lanzouw.top/676014055131.html
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj