提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
随着人工智能的不断发展,二维码在生活扮演者重要的角色,不管是健康吗还是线上支付都离不开他的身影。
一、回顾
上一篇文章,我们简要介绍了二维码信息的读取,今天我们在这基础上进一步深入,尝试用摄像头进行识别读取。
二、使用步骤
1 .所需准备
上一章内容主要介绍了如何对本地的二维码图片进行读取识别。本章内容要用到摄像头进行补足,那么需要用到一个基础功能,就是opencv的绘画功能。
本章需要用到的主要知识
1.多边形的绘制
img 图像。
pts 折线的顶点指针数组。
npts 折线的定点个数数组。也可以认为是pts指针数组的大小
contours 折线的线段数量。
is_closed 指出多边形是否封闭。如果封闭,函数将起始点和结束点连线。
color 折线的颜色。
thickness 线条的粗细程度。
line_type 线段的类型。参见cvLine。
shift 顶点的小数点位数。
多边形函数标准形式是:polylines(img, pts, isClosed, color, thickness, lineType, shift),括号中的参数分别是表示:显示的图像、多边形顶点数组、折线是否闭合(闭合为True、不闭合False)、线条颜色、线条粗细、线形、顶点坐标中的小数位数(颜色用(0,0,0)表示其中分别为RGB的数值)
2.显示信息
cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)
各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细
2.读入数据
首先准备好相关的库,如何安装在上一节文章中有介绍。
1.引入库
import cv2
import numpy as np
from pyzbar.pyzbar import decode
2.调用摄像头这里的cao.set是设置分辨率 ,即显示窗口的大小。
cap = cv2.VideoCapture(0)
# 设置分辨率
cap.set(3,640)
cap.set(4,480)
cap.set()中有两个参数,如本文中3,4分别代表宽和高。后面两个参数代表的是改变后的数值
3.框选二维码
最常用的一般是矩形和多边形,但是生活中我们的二维码不会一直保持正立,而矩形框不会随着二维码的倾斜而倾斜,所以我们这里选择使用使用多边形。
首先,选定二维码的四个顶点坐标,这里我们使用numpy中的array函数,圈定数据类型为int
接着reshape一下pts,把数据格式 转换为(x,1,y)
最后cv2.polylines(显示的图像、多边形顶点数组、折线是否闭合、颜色、宽度)
pts=np.array([barcode.polygon],np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(255,0,255),5)
4.在边框上显示读取的信息
这里要用到一个函数cv.putText()函数
因为我们不希望显示的信息随着二维码的倾斜而倾斜,所以这里需要用到矩形框
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), 2)
barcode.rect 上一篇介绍过,二维码的矩形框信息
我们设定一个起点(0.1)为文本的起点,即为矩形框的左上角。
3.完整代码
import numpy as np
import cv2
from pyzbar.pyzbar import decode
#img = cv2.imread("D:\\image\\2.jpg")
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)
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), 2)
cv2.imshow('Result',img)
cv2.waitKey(1)
三.成果演示
四.总结
到这里一个简单的二维码扫码枪的代码演示就结束了,下一章我们演示一下如何制作二维码!