利用Opencv+Python 實現二維碼識別

準備工作:
二維碼圖片,我這裏直接打印在了一張A4紙上,或者直接在草料網站上生成 草料二維碼生成器,存放在手機上進行顯示。在安裝條碼掃描庫的時候大家注意:zbar庫只針對 python2 版本有支持,python3已經不再支持。課程中使用的是python3,所以我們只能安裝 pyzbar,安裝命令如下:

pip3 install pyzbar
實現目標
利用攝像頭識別二維碼中的內容並打印出來,同時兼容識別條形碼內容
打開pycharm開發工具,在項目中新建 code.py 文件,文件代碼如下:

# -*- coding:utf-8 –*-
import cv2
import pyzbar.pyzbar as pyzbar

def decodeDisplay(video):
    # 轉爲灰度圖像
    gray = cv2.cvtColor(video, cv2.COLOR_BGR2GRAY)
    barcodes = pyzbar.decode(gray)
    for barcode in barcodes:
        # 提取二維碼的位置,然後用邊框標識出來在視頻中
        (x, y, w, h) = barcode.rect
        cv2.rectangle(video, (x, y), (x + w, y + h), (0, 255, 0), 2)
        # 字符串轉換
        barcodeData = barcode.data.decode("utf-8")
        barcodeType = barcode.type
        # 在圖像上面顯示識別出來的內容
        text = "{}".format(barcodeData)
        cv2.putText(video, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 0), 2)
        # 打印識別後的內容
        print("[掃描結果] 二維碼類別: {0} 內容: {1}".format(barcodeType, barcodeData))
    cv2.imshow("cam", video)

def detect():
    cv2.namedWindow("cam",cv2.WINDOW_NORMAL)
    cam = cv2.VideoCapture(0)
    while True:
        # 讀取當前幀
        ret, frame = cam.read()
        decodeDisplay(frame)
        # 按ESC鍵退出
        if(cv2.waitKey(5)==27):
            break
    cam.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    detect()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章