在 Python 中使用 OpenCV 建立二維碼掃描器

Manav Narula 2023年1月30日
  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