Toriyung

导航

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),但必须多包括一层"外衣",可以是数组形式也可以是列表形式。重点是“外衣”内的数据必须为数组。坐标依次为从左上开始的顺时针方向。

posted on 2022-03-05 22:04  Toriyung  阅读(111)  评论(0编辑  收藏  举报