在 Python 中使用 OpenCV 创建二维码扫描器

Manav Narula 2024年2月15日
  1. 使用 QRCodeDetector 类在 Python 中使用 OpenCV 创建二维码扫描器
  2. 结论
在 Python 中使用 OpenCV 创建二维码扫描器

我们都熟悉不同产品中存在的条形码。基于摩尔斯电码,条形码通过使用线条和空格表示信息来存储信息,并水平存储数据。

最近,二维码也开始流行起来。QR 码存储在一个盒子中,并使用带有一些点的黑白方块组合来表示。

它也是基于摩尔斯电码的,所以它可以被认为是一种条形码矩阵。

二维码在存储方面优于传统条码。它以两个方向存储数据;因此它可以包含比条形码更多的信息。

此信息可以是 URL、联系人和其他最多四千个字符的信息。现在几乎每部手机都有一个二维码扫描器的应用程序。

本教程将演示如何使用 Python 中的 OpenCV 库创建二维码扫描器。

OpenCV 库包含可以有效存储和处理图像的不同功能和类。我们可以在我们的框架中应用广泛的预定义技术。

使用 QRCodeDetector 类在 Python 中使用 OpenCV 创建二维码扫描器

OpenCV 库的 4.0.0 版引入了 QRCodeDetector 类。此类包含可用于检测和扫描图像以获取 QR 码的方法。

我们可以使用不同的方法扫描单个和多个二维码。

此类中的 detect() 方法用于扫描图像中的二维码;它会找到包含 QR 码的框。decode() 方法对检测到的二维码进行解码。

要检测给定图像中的多个 QR 码,我们可以使用 detectMulti()decodeMulti() 函数。为了检测和解码曲面上的代码,我们分别使用 detectCurved()decodeCurved() 方法。

我们可以使用 detectandDecode() 函数同时检测和解码图像中的代码。对于此方法,还存在 detectandDecodeCurved()detectandDecodeMulti() 方法。

现在让我们使用这个类创建一个非常简单的二维码,并将扫描下图中的二维码:

待扫描二维码

请参阅下面的代码。

import cv2

img = cv2.imread("2.jpg")
det = cv2.QRCodeDetector()
info, box_coordinates, _ = det.detectAndDecode(img)

if box_coordinates is None:
    print("No Code")
else:
    print(info)

if box_coordinates is not None:
    box_coordinates = [box_coordinates[0].astype(int)]
    n = len(box_coordinates[0])
    for i in range(n):
        cv2.line(
            img,
            tuple(box_coordinates[0][i]),
            tuple(box_coordinates[0][(i + 1) % n]),
            (0, 255, 0),
            3,
        )

cv2.imshow("Output", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

http://sampleurl.com

使用 OpenCV 扫描二维码

在上面的示例中,我们创建了 QRCodeDetector 类的对象,并使用 detectandDecode() 函数扫描和解码给定图像中的 QR 码。该函数返回显示的二维码信息。

它还返回了围绕 QR 码的框的坐标。我们使用 line() 函数使用这些坐标在图像上绘制其边界。

显示最终图像,我们使用 waitKey()destroyAllWindows() 函数来防止此窗口自动关闭,并等待用户在关闭它之前按下某个键。

在我们的示例中,我们从目录中读取图像并扫描 QR 码。我们可以通过使用网络摄像头并从那里读取图像来使其更具交互性。

OpenCV 提供了 VideoCapture 类来捕捉和读取网络摄像头的视觉效果。

结论

本教程演示了使用 Python 的 OpenCV 库创建一个简单的二维码扫描器。我们首先讨论了 QR 码的基础知识、它与条形码的比较以及它可以存储的信息。

我们简要讨论了 OpenCV 库中的 QRCodeDetector 类,它提供了许多从图像中检测和解码 QR 码的方法。我们提供了一个简单的 QR 码扫描器示例,使用此类扫描和解码给定图像中的 QR 码。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相关文章 - Python OpenCV