pyzbar Q&A_1
2022/03/05
基于pyzbar的二维码识别
代码
import cv2 as cv import numpy as np from pyzbar.pyzbar import decode cap = cv.VideoCapture(0) #打开摄像头(第几号摄像头) cap.set(3,640) #设置(帧宽度,数值) cap.set(4,480) #设置(帧高度,数值) while True: flag, frame = cap.read() # 读取(是否读取成功(返回1/0),读取到的帧) for code in decode(frame): #解码信息 data = code.data.decode('utf-8') #信息内容主体部分解码成字符串 point = np.array(code.polygon,np.int32) #信息坐标部分解码成整数数组 if data == 'toriyung': detect_color = (0,255,0) else: detect_color = (0,0,255) cv.polylines(frame,[point,True],detect_color,5) #多边体直线画法(图片,所有点的坐标的二维数组,是否闭合) cv.putText(frame, data, tuple([point[0][0][0],point[0][0][1]-5]),cv.FONT_HERSHEY_SIMPLEX,1,detect_color,1) cv.imshow('frame',frame) cv.waitKey(1)
运行效果
实现对二维码的框选识别以及判断是否符合设定内容
遇到的问题
Q1:cv2的摄像头函数 cap.set()
A1:为配置摄像头窗口参数等,输入第一个参数为配置标志,如3为帧宽度,4为帧高度,第二个参数为大小。其余摄像头函数见代码注释
Q2:np.array()问题
A2:将输入数据整理成数组,输入第二参数为数组内数据类型
Q3:pyzbar.decode相关
A3:将图片内存在所有二维码/条形码解码并返回相关信息,包括信息主体内容,坐标,包括矩形(相对坐标轴,对旋转无法适应)、多边体(相对码本身,对旋转适应)等。其中信息主体内容数据类型为字节,需进一步解码(decode)。
Q4:cv.polylines()输入
A4:输入坐标数组(numpy.array),但必须多包括一层"外衣",可以是数组形式也可以是列表形式。重点是“外衣”内的数据必须为数组。坐标依次为从左上开始的顺时针方向。