opencv检测二维码
生成二维码
静态识别二维码
动态识别二维码
识别受污染的二维码
生成二维码
首先,我们要安装两个个模块,qrcode,image,
pip install qrcode
pip install image
生成二维码
import qrcode
img = qrcode.make('simpleqrcode')
img.save('D:/simpleqrcode.jpg')
#img.show()
静态识别二维码
识别电脑中的二维码
import cv2
import numpy as np
import qrcode
img = cv2.imread('simpleqrcode.jpg')
qrcode = cv2.QRCodeDetector()
result,points,code = qrcode.detectAndDecode(img)
print(result)
返回值有三个,第一个result就是解码后的内容,例如我这个二维码的结果是"1234567890".第二个points是二维码轮廓的四个角,从左上角顺时针转的.第三个code是二维码的原始排列,也就是每个点是0还是255的一个矩阵.白色是255,黑色是0.
调用电脑摄像头识别二维码
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()
从本地摄像头截取图片
import cv2
import os
# 获取本地摄像头
# folder_path 截取图片的存储目录
def get_img_from_camera_local(folder_path):
cap = cv2.VideoCapture(1)
i = 1
while True:
ret, frame = cap.read()
cv2.imshow("capture", frame)
print(str(i))
cv2.imwrite(folder_path + str(i) + '.jpg', frame) # 存储为图像
if cv2.waitKey(1) & 0xFF == ord('q'):
break
i += 1
cap.release()
cv2.destroyAllWindows()
# 测试
if __name__ == '__main__':
folder_path = 'D:\\python\\'
if not os.path.exists(folder_path):
os.makedirs(folder_path)
get_img_from_camera_local(folder_path)