pyzbar 二维码、条形码识别

2019-10-09 16:26:37 浏览数 (1)

利用python的第三方模块 pyzbar 可以很方便的进行二维码的识别(也能识别条形码,用法别无二致)。

下面的自定义函数会将图像中识别出的条形码或者QR二维码给圈出来,并给出识别结果:

代码语言:javascript复制
from pyzbar import pyzbar
import cv2
import numpy as np

def image_detect(img):
    QRdetecter = cv2.QRCodeDetector()
    barcodes = pyzbar.decode(img)
    #print(barcodes)
    for barcode in barcodes:# 循环读取检测到的条形码
        # 绘条形码、二维码多边形轮廓
        points =[]
        for point in barcode.polygon:
            points.append([point[0], point[1]])
        points = np.array(points,dtype=np.int32).reshape(-1,1, 2)
        cv2.polylines(img, [points], isClosed=True, color=(0,0,255),thickness=2)

        # 条形码数据为字节对象,所以如果我们想把它画出来
        # 需要先把它转换成字符串
        barcodeData = barcode.data.decode("UTF-8") #先解码成字符串
        barcodeType = barcode.type
        # 绘出图像上的条形码数据和类型
        text = "({}): {} ".format(barcodeType, barcodeData )
        print(text)
        #cv2.putText(img, text, (x, y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
    cv2.imshow("QR", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

一维条形码的识别:

代码语言:javascript复制
img0 = cv2.imread("bar.jpg")
image_detect(img0)

识别结果:

代码语言:javascript复制
(CODE128): 01950123456789033102000400

注意:类型CODE128代表条形码。

普通二维码的识别:

代码语言:javascript复制
img2 = cv2.imread("test.png")
image_detect(img2)

识别结果:

代码语言:javascript复制
(QRCODE): 有一天
一只青蛙亲了兔子一口撒腿就跑
兔子紧追
青蛙情急之下跳进了池塘
不一会儿
一只癞蛤蟆爬了出来
兔子大笑:哈哈,过敏了吧!

注意:类型QRCODE代表QR二维码。

旋转的二维码的识别:

代码语言:javascript复制
img2 = cv2.imread("rotated.png")
image_detect(img2)

识别结果(2个):

代码语言:javascript复制
(QRCODE): Thalassiodracon
(QRCODE): Thalassiodracon

倾斜的二维码的识别:

代码语言:javascript复制
img3 = cv2.imread("qx.jpg")
image_detect(img3)

识别结果:

代码语言:javascript复制
(QRCODE): http://ma.taobao.com/r/cs-uqxohnmy9z_UK2pJxseigTyHqA

0 人点赞