寫東西就要寫全面,前兩天寫了如何用python生成二維碼,今天博主就給大家介紹一個識別二維碼的方法。
1、安裝本次開發所需要的庫opencv 和pyzbar
pip install pyzbar
pip install opencv-python
2、寫代碼
1)導入所需的庫
from pyzbar.pyzbar import decode
import cv2
2)創建一段測試代碼,查看識別后的返回數據
def test():
img = cv2.imread("lizaza.png")
result = decode(img)
print(result)
3)根據需要保留對應的返回數據
def test():
img = cv2.imread("lizaza.png")
result = decode(img)
print(result)
for d in result:
print(d.data)
4)調用opencv的方法來實例化一個對象
capture = cv2.VideoCapture(0)
5)創建一個死循環實時更新攝像頭所采集到的信息
while True:
# 獲取圖像
fet, frame = capture.read()
6)識別采集到的二維碼並輸出所需的數據
# 識別二維碼
data = decode(frame)
for d in data:
r_data = d.data.decode("utf-8")
print(r_data)
7)顯示攝像頭所采集到的圖像,並設置鍵盤監聽來關閉程序
cv2.imshow("QRCode", frame)
# 設置關閉窗口
if cv2.waitKey(1) & 0xFF == ord('q'):
break
pass
3、完整代碼
from pyzbar.pyzbar import decode
import cv2
capture = cv2.VideoCapture(0)
while True:
# 獲取圖像
fet, frame = capture.read()
# 識別二維碼
data = decode(frame)
for d in data:
r_data = d.data.decode("utf-8")
print(r_data)
cv2.imshow("QRCode", frame)
# 設置關閉窗口
if cv2.waitKey(1) & 0xFF == ord('q'):
break
pass
pass
capture.release()
cv2.destroyAllWindows()
4、總結
pyzbar+opencv直接識別靜態圖片時無法識別傾斜的二維碼,但是實時識別二維碼的時候可以正常識別,博主暫時也搞不懂是啥原因。opencv如果直接使用cv.imshow()函數,窗口名中包含中文,則顯示為亂碼,建議還是使用英文命名。
版權聲明:該文章為博主原創,如有轉載請標明出處https://www.lizaza.cn
