opencv-python实战项目十:二维码识别


一:简介

二维码识别是一种利用图像处理技术,从数字图像中提取并解析二维码信息的过程。该技术广泛应用于信息快速交换、移动支付、产品追踪等领域。通过专业算法对图像进行预处理、定位、采样和解码,实现高效准确的二维码内容读取,为现代社会提供了极大的便利。

二:opencv二维码识别流程

OpenCV二维码识别流程包括以下步骤:首先,图像导入,即加载包含二维码的图像文件或从摄像头捕获实时图像;接着进行图像预处理,通过灰度化和二值化等操作减少噪声、提高对比度;随后,使用cv2.QRCodeDetector进行二维码检测,确定图像中的二维码位置和角度;然后,从检测到的二维码中提取编码的数据;最后,在原始图像上绘制二维码边界框,并展示或输出解析得到的数据。下面介绍一下cv2.QRCodeDetector。
cv2.QRCodeDetector 是 OpenCV 库中专门用于检测和解析 QR 码(二维码)的类。它的核心方法 detectAndDecode 提供了便捷的接口,用于处理包含二维码的图像。该方法能够识别图像中的二维码,并返回二维码包含的数据、边界框的坐标位置以及经过矫正的二维码图像。通过这一系列步骤,开发者可以轻松地从图像中提取和利用二维码中的信息。
detectAndDecode方法以一个图像作为输入,并返回三个值:

data:
○ 类型:字符串
○ 描述:这是二维码中包含的实际数据。如果二维码被成功识别,这个字符串将包含二维码编码的信息。如果二维码没有被识别,这个值将为空字符串。
bbox:
○ 类型:numpy.ndarray
○ 描述:这是一个二维数组,表示二维码的边界框坐标。如果二维码被成功识别,这个数组将包含四个点的坐标,这四个点定义了二维码的四个角。每个点是一个 (x, y) 坐标对。数组的形状通常是 (1, 4, 2),其中:
第一个维度表示检测到的二维码数量(通常只有一个)。
第二个维度表示四个角点。
第三个维度表示每个点的 x 和 y 坐标。
如果没有检测到二维码,bbox 将是 None。
straight_qrcode:
○ 类型:numpy.ndarray
○ 描述:这是一个二维数组,表示检测到的二维码的矫正图像。如果二维码被成功识别,这个数组将包含一个灰度图像,它是二维码的矫正版本,可以用于进一步的识别或处理。如果没有检测到二维码,straight_qrcode 将是 None。

使用代码:

img = cv2.imread(r'F:\traditional_vison\1.jpg')
# 检测并解码二维码
data, bbox, straight_qrcode = qrDecoder.detectAndDecode(img)

三:整体代码

import cv2

# 初始化 QRCode 检测器
qrDecoder = cv2.QRCodeDetector()

# 读取图像
img = cv2.imread(r'F:\traditional_vison\1.jpg')

# 检测并解码二维码
data, bbox, straight_qrcode = qrDecoder.detectAndDecode(img)
if bbox is not None and len(bbox) > 0 and len(bbox[0]) == 4:
    # 提取第一个二维码的四个角点
    points = bbox[0]
    # 使用第一个点作为左上角,第三个点作为右下角
    top_left = (int(points[0][0]), int(points[0][1]))
    bottom_right = (int(points[2][0]), int(points[2][1]))

    # 在图像上绘制矩形
    cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2)
    # 在图像上绘制二维码数据
    # 设置文本位置(在矩形框的上方)
    text_position = (top_left[0], top_left[1] - 10)
    # 设置文本字体
    font = cv2.FONT_HERSHEY_SIMPLEX
    # 设置字体大小和颜色
    font_scale = 0.5
    font_color = (0, 0, 255)  # 红色
    # 设置文本厚度
    thickness = 1
    # 绘制文本
    cv2.putText(img, data, text_position, font, font_scale, font_color, thickness)

# 显示图像
cv2.imshow("Image with QR Code", img)
cv2.waitKey(0)

四:效果

原图:

处理后的图:

在这里插入图片描述

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值