文章目录
- 一:简介
- 二:opencv二维码识别流程
- 三:整体代码
- 四:效果
一:简介
二维码识别是一种利用图像处理技术,从数字图像中提取并解析二维码信息的过程。该技术广泛应用于信息快速交换、移动支付、产品追踪等领域。通过专业算法对图像进行预处理、定位、采样和解码,实现高效准确的二维码内容读取,为现代社会提供了极大的便利。
二: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)
四:效果
原图:
处理后的图: