干货 | 基于OpenCV Python实现二维码检测与识别

二维码结构与检测

标准的二维码结构如下所示:

干货 | 基于OpenCV Python实现二维码检测与识别

特别需要注意的是图中三个黑色正方形区域,它们是用于定位二维码的最关键区域。我们在进行二维码扫描检测时,首要任务就是识别这三个区域。一旦成功找到这三个区域,就意味着我们已经成功检测到一个二维码,可以进行定位与识别了。这三个角上的正方形区域从左到右,从上到下的黑白比例为1:1:3:1:1。不管角度如何变化,这个特征是最显著的,通过这个特征我们可以实现二维码的扫描检测与定位。

干货 | 基于OpenCV Python实现二维码检测与识别

立即学习“Python免费学习笔记(深入)”;

使用Python语言生成二维码其实非常简单,有一个纯Python的二维码生成包,地址和安装执行命令如下:

然后执行如下代码即可生成二维码,代码示例如下:

image = qrcode.make('hello, qrcode')image.save('test.png')

使用zbar进行二维码解析时需要注意,标准的zbar不支持Python3,这是一个较大的问题。幸运的是,有一位开发者在zbar的基础上进行了封装,开发了pyzbar包,支持Python2和Python3,非常实用。安装非常简单,Windows下一条命令即可搞定,Linux和Mac OS则需要先安装zbar然后再执行此命令。

解析接口支持PIL/Pillow图像、OpenCV/numpy数组和原始字节等多种格式,这意味着可以与OpenCV无缝对接,OpenCV读取的图像可以直接用于解析。示例如下:

干货 | 基于OpenCV Python实现二维码检测与识别

ViiTor实时翻译 ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

ViiTor实时翻译 116 查看详情 ViiTor实时翻译

解析结果分为四个部分,分别为:

外接矩形与多边形状表示如下:

干货 | 基于OpenCV Python实现二维码检测与识别

其中,蓝色矩形表示外接矩形,粉色表示多边形的四个点坐标。

二维码检测与解析示例如下,其中QRcodeDetector是我基于二值图像轮廓分析实现的二维码检测类。该类支持各种纠偏、倾斜和放缩的二维码检测,同时对检测到的二维码区域进行ROI截取,然后使用zbar进行二维码解析,输出二维码解析数据内容。导入的包与初始化代码如下:

import qrcodefrom pyzbar.pyzbar import decodefrom qrcode_demo.qrcode_detector import QRcodeDetectorimport cv2 as cvimport numpy as npqr_detector = QRcodeDetector()image = qrcode.make('hello, qrcode')image.save('test.png')result = decode(cv.imread('test.png'))print(result[0][3])

静态图像二维码检测与解析的代码如下:

def image_detect():    src = cv.imread("D:/images/wechat_id.jpg")    result, code_image = qr_detector.detect(src)    text_content = decode(code_image)    if text_content is not None:        print("content : %s"% text_content[0][0])        cv.imshow("input", src)

实时视频二维码检测与解析的代码如下:

def video_detect():    capture = cv.VideoCapture(0)    height = capture.get(cv.CAP_PROP_FRAME_HEIGHT)    width = capture.get(cv.CAP_PROP_FRAME_WIDTH)    out = cv.VideoWriter("D:/qrcode_demo.mp4", cv.VideoWriter_fourcc('D', 'I', 'V', 'X'), 15,                         (np.int(width), np.int(height)), True)    while True:        ret, frame = capture.read()        if ret is True:            frame = cv.flip(frame, 1)            cv.imshow("frame", frame)            result, code_image = qr_detector.detect(frame)            if code_image is not None:                text = decode(code_image)                if len(text) > 0:                    cv.putText(result, text[0][0].decode("utf-8"), (20, 100), cv.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 2, 8)                    cv.imwrite("D:/result.png", result)                    print(text[0][0].decode("utf-8"))            out.write(result)            cv.imshow("result", result)            c = cv.waitKey(5)            if c == 27:                break        else:            break    cv.waitKey(0)    cv.destroyAllWindows()

效果展示如下:

干货 | 基于OpenCV Python实现二维码检测与识别干货 | 基于OpenCV Python实现二维码检测与识别

以上就是干货 | 基于OpenCV Python实现二维码检测与识别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/277999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 15:21:40
下一篇 2025年11月4日 15:26:05

相关推荐

发表回复

登录后才能评论
关注微信