大家好,这篇文章我们使用opencv的一些算法来实现读取二维码以及条形码信息的功能。
生成二维码
在此,我以二维码的识别举例。首先,我们使用二维码生成器生成两个二维码,一个定义一个英文单词Winter,另一个定义一个网站名称。如图所示:
在此我们自己定义命名的二维码已经生成。接下来我们编写代码,实现摄像头读取二维码信息的功能。
代码
import cv2
import numpy as np
from pyzbar.pyzbar import decode ###导入解码器,获取二维码并识别
cap = 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) ###myData可以是文本、数字、网站、others
pts = np.array([barcode.polygon],np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(255,0,255),5)
pts2 = barcode.rect
cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,
0.9,(255,0,255))
cv2.imshow('Result',img)
cv2.waitKey(1)
cap.release()
cv2.destroyAllWindows()
代码功能解释
import cv2
: 导入OpenCV库,用于图像处理。import numpy as np
: 导入NumPy库,用于数值计算。from pyzbar.pyzbar import decode
: 导入pyzbar库中的decode
函数,用于解码二维码。cap = cv2.VideoCapture(0)
: 打开摄像头设备,0
表示默认摄像头,如果有多个摄像头可以切换设备号。cap.set(3,640)
和cap.set(4,480)
: 设置捕获图像的宽度和高度为640x480像素。while True:
: 进入无限循环,持续捕获并处理图像。success, img = cap.read()
: 从摄像头中读取一帧图像,success
表示读取成功与否,img
是捕获的图像。for barcode in decode(img):
: 使用pyzbar
库中的decode
函数识别图像中的所有二维码。myData = barcode.data.decode('utf-8')
: 解码二维码中的数据为UTF-8格式的字符串。myData可以是文本、数字、网站,以及其它。print(myData)
: 打印解码得到的数据到控制台。- 绘制二维码的边界框:
pts
获取二维码的多边形轮廓。cv2.polylines()
绘制多边形轮廓。- 在二维码上方显示解码得到的数据:
cv2.putText()
在图像上绘制文字,显示二维码中的解码数据。这段代码的作用是实时从摄像头捕获图像,检测其中的二维码并解码,然后在图像上标注二维码的位置并显示解码得到的数据。
结果显示
如图所示,二维码信息已经被我们读取。本篇文章简单实现了二维码解码功能,在下篇文章我们一起学习创建一个“二维码的识别”项目。