【Python3-OpenCV】实现二维码识别与解析

1,491 阅读2分钟

这是我参与更文挑战的第18天,活动详情查看: 更文挑战

OpenCV是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块。在Python中常使用OpenCV库实现图像处理。

image.png

本文将介绍如何在Python3中使用OpenCV实现二维码识别与解析:

OpenCV在对象检测模块QRCodeDetector有两个相关API分别实现二维码检测与二维码解析。

检测API

points = QRCodeDetector.detect(img)

其中:

  • img为输入图像,灰度或者彩色图像;
  • points输出得到的二维码四个点的坐标信息;

识别API

straight_qrcode = QRCodeDetector.decode(img, points)

其中:

  • img为输入图像,灰度或者彩色图像;
  • points是二维码ROI最小外接矩形顶点坐标;
  • straight_qrcode输出的是二维码区域ROI图像信息 返回的二维码utf-8字符串;

结合检测识别的API

points,straight_qrcode = QRCodeDetector.detectAndDecode(img)

其中:

  • img为输入图像,灰度或者彩色图像;
  • points输出二维码ROI最小外接矩形顶点坐标;
  • straight_qrcode输出的是二维码区域ROI图像信息 返回的二维码utf-8字符串;

网站显示

我们通过二维码识别与解析出来的网站可以通过Python3webbrowser库,利用谷歌浏览器进行显示。

chromePath = r'C:\Users\37218\AppData\Local\Google\Chrome\Application\chrome.exe '
webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chromePath))
webbrowser.get('chrome').open(str(codeinfo),new=1,autoraise=True)

其中:

  • chromePath为谷歌浏览器文件所在的地址;
  • str(codeinfo)为解析得到的网站;

完整代码

import cv2
import numpy as np
import webbrowser

# 读取图像
src = cv2.imread("E:\\demo\\demo1.png")
cv2.imshow("image", src)

# 灰度转换
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

# 检测
qrcoder = cv2.QRCodeDetector()

# 解码
codeinfo, points, straight_qrcode = qrcoder.detectAndDecode(gray)
print(points)
result = np.copy(src)

# 描绘轮廓
cv2.drawContours(result, [np.int32(points)], 0, (0, 0, 255), 2)
print("qrcode : %s" % codeinfo)

# 添加文字
cv2.putText(result, "qrcode:" + str(codeinfo), (0, 20), cv2.FONT_HERSHEY_SIMPLEX, .5, (255, 0, 0), 1);
cv2.imshow("result", result)

#使用Google浏览器,打开扫码得到的网站
chromePath = r'C:\Users\37218\AppData\Local\Google\Chrome\Application\chrome.exe '
webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chromePath))
webbrowser.get('chrome').open(str(codeinfo),new=1,autoraise=True)

cv2.waitKey(0)
cv2.destroyAllWindows()

输出为:

image.png

我用草料二维码,将我掘金首页的网页链接制作成了二维码。

代码识别并解析出来了二维码的网站,同时也打开了该网站页面。

本月将陆续推出相关系列文章,

篇篇精彩,尽请关注。