openCV实战练习(3)——二维码、条形码扫描

项目Introduce:

项目名称:

        通过调取摄像头实现对二维码和条形码的识别。

项目流程预览:

1.使用pip 下载pyzbar

2.创建文件

3.生成二维码

4.调取摄像头实时扫描

5.decode函数对图像解码,最后绘制图像。

项目与知识衔接:

视频处理(VideoCapture)、pyzbar条码处理、图形绘制putText

Learning From:

Python+pyzbar识别二维码条形码_wu_zhiyuan的博客-CSDN博客

Python-二维码处理(qrcode、pyzbar)_梦之海岛的博客-CSDN博客_pyzbar.decode()是什么意思

Opencv项目实战:03 扫描二维码&条形码_c#使用opencv调用摄像头识别条码_夏天是冰红茶的博客-CSDN博客

具体操作步骤以及代码:

1.创建文件,下载pyzbar:

 创建一个目录,并且创建两个py文件和一个text文件

 DataFile的text文件供传入二维码扫描内容,条形码信息无需填入。

下载pyzbar库,可以用pip install下载,我的配置用的是conda包,所以我在conda的命令窗口下载

然后在pycharm里查看资源包,如果看到pyzbar即表示下载成功

 

导入库

import cv2
import numpy as np
from pyzbar.pyzbar import decode

2.摄像头读取条形码

cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)

3.读取成功时,进入while True,使用pyzbar中的dacode函数处理条码,并且绘制出条形码区域

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,(0,255,255),5)
        pts2 = barcode.rect

        cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,255),2)

4.展示结果

    cv2.imshow('Result',img)
    k=cv2.waitKey(1) &0xFF
    if k == 27:
        break

项目所需要的工具以及预设参数:

pycharm+openCV+python

实现结果展示:

 

 

 

代码整体展示:

#二维码条形码扫描
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)
        pts = np.array([barcode.polygon],np.int32)
        pts = pts.reshape((-1,1,2))
        cv2.polylines(img,[pts],True,(0,255,255),5)
        pts2 = barcode.rect

        cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,255),2)
    cv2.imshow('Result',img)
    k=cv2.waitKey(1) &0xFF
    if k == 27:
        break

####延伸

做一个二维码授权登陆的环节:代码如下

# #利用二维码扫描识别授权状况
import cv2
import numpy as np
from pyzbar.pyzbar import decode

cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)

with open('DataFile.text') as f:
    myDataList = f.read().splitlines()

while True:

    success,img = cap.read()
    for barcode in decode(img):
        myData = barcode.data.decode('utf-8')
        print(myData)

        if myData in myDataList:
            myOutput = 'Authorized'
            myColor = (0,255,0)
        else :
            myOutput = 'Un-Autorized'
            myColor = (0,0,255)

        pts = np.array([barcode.polygon], np.int32)
        pts = pts.reshape((-1,1,2))
        cv2.polylines(img,[pts],True,myColor,5)
        pts2 = barcode.rect
        cv2.putText(img,myOutput,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,myColor,2)

    cv2.imshow('Result',img)
    k=cv2.waitKey(1) &0xFF
    if k==27:
        break

实现效果:

 

猜你喜欢

转载自blog.csdn.net/Crabfishhhhh/article/details/129082087
今日推荐