利用python的第三方模块 pyzbar 可以很方便的进行二维码的识别(也能识别条形码,用法别无二致)。
下面的自定义函数会将图像中识别出的条形码或者QR二维码给圈出来,并给出识别结果:
代码语言:javascript复制from pyzbar import pyzbar
import cv2
import numpy as np
def image_detect(img):
QRdetecter = cv2.QRCodeDetector()
barcodes = pyzbar.decode(img)
#print(barcodes)
for barcode in barcodes:# 循环读取检测到的条形码
# 绘条形码、二维码多边形轮廓
points =[]
for point in barcode.polygon:
points.append([point[0], point[1]])
points = np.array(points,dtype=np.int32).reshape(-1,1, 2)
cv2.polylines(img, [points], isClosed=True, color=(0,0,255),thickness=2)
# 条形码数据为字节对象,所以如果我们想把它画出来
# 需要先把它转换成字符串
barcodeData = barcode.data.decode("UTF-8") #先解码成字符串
barcodeType = barcode.type
# 绘出图像上的条形码数据和类型
text = "({}): {} ".format(barcodeType, barcodeData )
print(text)
#cv2.putText(img, text, (x, y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
cv2.imshow("QR", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
一维条形码的识别:
代码语言:javascript复制img0 = cv2.imread("bar.jpg")
image_detect(img0)
识别结果:
代码语言:javascript复制(CODE128): 01950123456789033102000400
注意:类型CODE128代表条形码。
普通二维码的识别:
代码语言:javascript复制img2 = cv2.imread("test.png")
image_detect(img2)
识别结果:
代码语言:javascript复制(QRCODE): 有一天
一只青蛙亲了兔子一口撒腿就跑
兔子紧追
青蛙情急之下跳进了池塘
不一会儿
一只癞蛤蟆爬了出来
兔子大笑:哈哈,过敏了吧!
注意:类型QRCODE代表QR二维码。
旋转的二维码的识别:
代码语言:javascript复制img2 = cv2.imread("rotated.png")
image_detect(img2)
识别结果(2个):
代码语言:javascript复制(QRCODE): Thalassiodracon
(QRCODE): Thalassiodracon
倾斜的二维码的识别:
代码语言:javascript复制img3 = cv2.imread("qx.jpg")
image_detect(img3)
识别结果:
代码语言:javascript复制(QRCODE): http://ma.taobao.com/r/cs-uqxohnmy9z_UK2pJxseigTyHqA