opencv二维码识别算法(Python使用OpenCV生成及读取二维码)

二维码(QR码)是一种矩阵条形码,是一种机器可读的光学标签,其中包含有关其所附着物品的信息。实际上,二维码(QR码)码通常包含指向网站或应用程序的定位器,标识符或跟踪器的数据。

安装依赖

pip install opencv-python qrcode pillow

 

python,计算机视觉处理

1.生成QR码

  • 使用qrcode库生成QR代码基本上很简单:
#!/usr/bin/env python 
# -*- coding:utf-8 -*-

'''
生成二维码
'''

import qrcode

# 二维码包含的示例数据
data = "https://www.python.org/"
# 生成的二维码图片名称
filename = "python.png"
# 生成二维码
img = qrcode.make(data)
# 保存成图片输出
img.save(filename)

这将在当前目录中生成一个名为“ python.png”的新文件,其中包含指定数据的QR码图像,是不是很容易.

 


 

2.读取二维码

有许多读取QR码的工具。这次我们使用OpenCV,他与网络摄像头进行了集成。

  • 首先读取刚刚生成的图像
  • OpenCV已经内置了二维码检测器
  • 有了图像和检测器,下一步就是解码该数据
  • detectAndDecode()函数将图像作为输入,并返回3个值的元组:从二维码解码的数据,找到的二维码四边形的顶点输出数组以及包含经过整流和二值化二维码的输出图像。
  • 我们需要数据和bbox,bbox将会图像中绘制四边形,数据会被打印到控制台
  • cv2.line()函数绘制一条连接两个点的线段,从bbox数组中检索这些点,该数组已经通过detectAndDecode()解码。然后指定一种蓝色(OpenCV使用BGR颜色,(255,0,0)是蓝色)并且厚度为2
  • 最后,显示图像并在按下任意键时退出
#!/usr/bin/env python 
# -*- coding:utf-8 -*-

'''
读取二维码
'''
import cv2

# 读取二维码图片
img = cv2.imread("python.png")
# 初始化cv2的二维码检测器
detector = cv2.QRCodeDetector()
# 解码
data, bbox, straight_qrcode = detector.detectAndDecode(img)
# 如果解码成功
if bbox is not None:
    print(f"QRCode data:
{data}")
    # 用线条显示图像
    # 边框长度
    n_lines = len(bbox)
    for i in range(n_lines):
        # 输出
        point1 = tuple(bbox[i][0])
        point2 = tuple(bbox[(i + 1) % n_lines][0])
        cv2.line(img, point1, point2, color=(255, 0, 0), thickness=2)
# 显示结果
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 


 

机器学习-ML-Machine Learning

3.使用网络摄像头实时检测和解码二维码

#!/usr/bin/env python 
# -*- coding:utf-8 -*-

'''
使用网络摄像头实时检测,解码二维码
'''

import cv2

cap = cv2.VideoCapture(0)
detector = cv2.QRCodeDetector()
while True:
    _, img = cap.read()
    data, bbox, _ = detector.detectAndDecode(img)
    if bbox is not None:
        for i in range(len(bbox)):
            cv2.line(img, tuple(bbox[i][0]), tuple(bbox[(i + 1) % len(bbox)][0]), color=(255, 0, 0), thickness=2)
        if data:
            print("[+] QR Code detected, data:", data)
    cv2.imshow("img", img)
    if cv2.waitKey(1) == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 lqy2005888@qq.com 举报,一经查实,本站将立刻删除。