準備工作:
二維碼圖片,我這裏直接打印在了一張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()