概述

根据Opencv的描述,OpenCV3.4.4以上版本支持二维码检测和识别!

标题函数

Opencv在对象检测模块中 QRCodeDetector 有两个相关API分别实现二维码检测与二维码解析。

检测API

points = QRCodeDetector.detect(img)

其中:

img为输入图像,灰度或者彩色图像;
points输出得到的二维码四个点的坐标信息;

识别API

straight_qrcode = QRCodeDetector.decode(img, points)

其中:

img为输入图像,灰度或者彩色图像;
points是二维码ROI最小外接矩形顶点坐标;
straight_qrcode输出的是二维码区域ROI图像信息 返回的二维码utf-8字符串;
结合检测识别的API

points,straight_qrcode = QRCodeDetector.detectAndDecode(img)

其中:

img为输入图像,灰度或者彩色图像;
points输出二维码ROI最小外接矩形顶点坐标;
straight_qrcode输出的是二维码区域ROI图像信息 返回的二维码utf-8字符串;

效果如下

在这里插入图片描述
在这里插入图片描述

代码

整体检测识别的代码如下:

# -*- coding:utf-8 -*-
'''
@Author: knocky
@Blog: https://blog.csdn.net/zzx188891020
@E-mail: 188891020@qq.com
@File: QR code.py
@CreateTime: 2020/5/17 23:51
'''

import cv2
import numpy as np

fiies = ['myBlog.png','rotat45.png','rotate270.png','shadow.png']
for file in fiies:
    # 读取二维码
    src = cv2.imread(file)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    # 设置检测器
    qrcoder = cv2.QRCodeDetector()
    # 检测识别二维码
    codeinfo, points, straight_qrcode = qrcoder.detectAndDecode(gray)
    result = np.copy(src)
    cv2.drawContours(result, [np.int32(points)], 0, (0, 0, 255), 2)
    # 输出识别二维码的信息
    print("qrcode information is : \n%s"% codeinfo)
    # 显示图片
    cv2.imshow(file, result)
    #cv2.imshow(file+"roi", np.uint8(straight_qrcode))  # 这个代码是显示提取出来的二维码,注释掉了
cv2.waitKey(0)
cv2.destroyAllWindows()

注意,如果有多个二维码在框里,则无法识别下次找机会用目标检测分割以后,再试试如何识别多个。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐