OpenCV(项目)二维码识别(二维码、条形码)
生活随笔
收集整理的這篇文章主要介紹了
OpenCV(项目)二维码识别(二维码、条形码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
過程
1、獲取圖片中的二維碼信息
2、獲取視頻中的二維碼信息
3、檢測出二維碼框
4、顯示數據
5、添加數據,判斷二維碼是否授權
5-1:、添加數據
5-2、讀取文件信息,放入數組
5-3、判斷二維碼是否授權
總代碼
過程
1、獲取圖片中的二維碼信息
# 檢測圖像中的碼(解碼)
def Read_Decode_Pic():img = cv2.imread('Resource/qrcode.jpg')# 遍歷解碼for code in decode(img):print("條形碼/二維碼:", code)print("條形碼/二維碼數據:", code.data.decode('utf-8')) #解碼數據
注:要解碼數據的話,必須在for循環中進行,不能直接賦值?
二維碼:?
?
?條形碼:
2、獲取視頻中的二維碼信息
# 檢測視頻中的碼(解碼)
def Read_Decode_Cam():cap = cv2.VideoCapture(0) #打開視頻while True:success, img = cap.read() #獲取每一幀圖片for code in decode(img): #解碼print("條形碼/二維碼:", code) #解碼內容print("條形碼/二維碼數據:", code.data.decode('utf-8')) # 解碼數據cv2.imshow('result', img) #逐像素顯示,不斷更替,相當于視頻cv2.waitKey(1) #延時1ms
3、檢測出二維碼框
如果是矩形框的話,比較方便,但是旋轉情況下,會不準確。因為rect獲取的是正的矩形,無法旋轉。
# 畫出矩形
pts = code.rect #得到矩形四個角
cv2.rectangle(image, pts, (255,0,255), 3) #畫出矩形
?所以我們需要獲取多邊形對它進行旋轉:
注:polylines函數中需要的坐標類型是是CV_32S,所以需要轉換一下
# 多邊形獲取(矩形的框)pts = np.array(code.polygon, np.int32) #獲取多邊形坐標cv2.polylines(image, [pts], True, (0,0,255), 5) #畫多邊形框
?
?可以發現,這時我們可以檢測到旋轉的矩形框。
4、顯示數據
獲取矩形框的左上角作為Text的坐標(左邊坐標),顯示數據?
# 顯示數據pts_rect = code.rectprint(pts_rect)cv2.putText(image, data, (pts_rect[0],pts_rect[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,0,0), 2)# 顯示數據 矩形坐標 字體類型 字體大小 顏色 粗細
5、添加數據,判斷二維碼是否授權
?????????創建一個文件,里面放入一些二維碼數據庫,讀取文件,判斷二維碼的數據是否在數據庫里面。(不在則紅色,表示未授權;在則綠色,表示已授權)
5-1:、添加數據
5-2、讀取文件信息,放入數組
# 讀取文件
def Read():global Data_ArrayData_Array = open('Authorited.txt').read().splitlines() #按行分隔print('已授權的數據:\n', Data_Array)
5-3、判斷二維碼是否授權
# 判斷二維碼是否授權
def Judge(data):global colorif data in Data_Array: #成功color = (0, 255, 0) #綠色標記print('Authorized\n')else: #失敗color = (0, 0, 255) #紅色標記print('Unauthorized\n')
總代碼
# 二維碼識別
import cv2
import numpy as np
from pyzbar.pyzbar import decode# 讀取文件
def Read():global Data_ArrayData_Array = open('Authorited.txt').read().splitlines() #按行分隔print('已授權的數據:',Data_Array,'\n')# 判斷二維碼是否授權
def Judge(data):global colorif data in Data_Array: #成功color = (0, 255, 0) #綠色標記print('Authorized\n')else: #失敗color = (0, 0, 255) #紅色標記print('Unauthorized\n')# 檢測圖像中的碼(解碼)
def Read_Decode_Pic(image):# 遍歷解碼for code in decode(image):# print("條形碼/二維碼:", code)data = code.data.decode('utf-8')print("條形碼/二維碼數據:", data) #解碼數據# 判斷二維碼是否授權Judge(data)# 多邊形獲取(矩形的框)pts_poly= np.array(code.polygon, np.int32) #獲取多邊形坐標cv2.polylines(image, [pts_poly], True, color, 5) #畫多邊形框# 顯示數據(獲取矩形框的左上角作為Text的坐標(左邊坐標),顯示數據)pts_rect = code.rect# print(pts_rect)cv2.putText(image, data, (pts_rect[0],pts_rect[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2)# 顯示數據 矩形坐標 字體類型 字體大小 顏色 粗細cv2.imshow('image', image) #等畫出所有矩形后顯示# 檢測視頻中的碼(解碼)
def Read_Decode_Cam():cap = cv2.VideoCapture(0) #打開視頻cap.set(3, 1000) #幀的寬度cap.set(4, 800) #幀的高度while True:success, image = cap.read() #獲取每一幀圖片cv2.imshow('image', image)image = Read_Decode_Pic(image) #對每一幀圖片檢測cv2.waitKey(1) #延時1msif __name__ == '__main__':Read() #讀取文件img = cv2.imread('Resource/qrcode.jpg')Read_Decode_Pic(img) # 檢測圖像中的碼(解碼)Read_Decode_Cam() # 檢測視頻中的碼(解碼)cv2.waitKey(0)
總結
以上是生活随笔為你收集整理的OpenCV(项目)二维码识别(二维码、条形码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV(26)图像分割 -- 距离
- 下一篇: 奇葩错误:不同变量名称相同