基于python-pyzbar的二维码识别(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

随着人工智能的不断发展,二维码在生活扮演者重要的角色,不管是健康吗还是线上支付都离不开他的身影。


一、回顾

上一篇文章,我们简要介绍了二维码信息的读取,今天我们在这基础上进一步深入,尝试用摄像头进行识别读取。

二、使用步骤

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)

三.成果演示

四.总结

到这里一个简单的二维码扫码枪的代码演示就结束了,下一章我们演示一下如何制作二维码!

猜你喜欢

转载自blog.csdn.net/weixin_45303602/article/details/127533374
今日推荐