今回はPythonでQRコードを読み取る方法を紹介しよう。
QRコードも読み取れるんですか!?
画像解析の分野に入るからな。
OpenCVにQRコード読み取りの関数が用意されている。今回はそれを紹介しよう。
Pythonで実装する
今回は以下のQRコードを読み込み、内容を解読する。

お宝の地図かも!?
、、だといいな。ともかく、答えは解読によって明らかになる。
まずはコード全体を紹介する。
import cv2
import numpy as np
image = cv2.imread("input/qrCode.png")
qrDetector = cv2.QRCodeDetector()
data,bbox,rectifiedImage = qrDetector.detectAndDecode(image)
print(type(rectifiedImage))
print(data)
# rectifiedImage = np.uint8(rectifiedImage);
cv2.imshow("Rectified QRCode", rectifiedImage)
print(type(rectifiedImage))
cv2.waitKey(0)
cv2.destroyAllWindows()
QRコード検出と読み取り(cv2.QRCodeDetector.detectAndDecode)
OpenCVにはQRCodeDetectorというQRコード操作のクラスが用意されている。今回はその中のdetectAndDecode()関数を使う。
cv2.QRCodeDetector.detectAndDecode(img[, points[, straight_qrcode]])
引数
OpenCV共通の引数はこちら
引数 | 説明 |
---|---|
points | 検出したQRコードの四角形の頂点座標を格納する配列。戻り値として取得するものと同じ。 |
straight_qrcode | 検出したQRコードの各セルの白黒情報(0: 黒、1: 白)が格納されたnumpy配列。戻り値として取得するものと同じ。 |
コード解説
コード上では、QRCodeDetectorオブジェクトを作成し、その後qrDetector.detectAndDecode()を呼び出している。
qrDetector.detectAndDecode()の結果として、画像中のQRコードの位置とその内容を取得している。
qrDetector = cv2.QRCodeDetector()
data,bbox,rectifiedImage = qrDetector.detectAndDecode(image)
戻り値が3つありますが、それぞれどんな情報です?
1つ目(data)はQRコードを読み取った内容が、2つ目(bbox)は画像中のQRコードの頂点座標が返される。3つ目(rectifiedImage)はバイナリ化されたQRコードの画像が返される。
今回のQRコードの内容は、戻り値として取得したdataに格納されている。
print(data)
>> QR code was invented in 1994.
意外とシンプルな文章が隠れてましたね。お宝、、
世の中そんなに甘くはない。QRコードを読んでWebサイトに飛ぶサービスなどは、中身にURLが仕込まれていたりするわけだ。
ちなみに、読み込んだQRコードは以下で表示している。
cv2.imshow("Rectified QRCode", rectifiedImage)
まとめ
QRコードの読み取り、意外と簡単だったろう?
はい、シンプルに実装できましたね。僕はこれからお宝QRコードを探しに旅に行ってきます。
(もう帰ってこなくていいぞ、、)
まあ、今回はここまでにしよう。
ありがとうございました~~♪