环境:Win 10、Pycharm 、Python3.9
1.Pycharm安装OpenCV
因需用到cv2库(安装的OpenCV版本为OpenCV4.5.5),所以需要在PyCharm中安装OpenCV。安装步骤为:点开”File“菜单的“Setting”选项,然后按照下面的两张图进行操作。
点“+”号,输入“opencv-python”,后进行安装,安装进度会展示在Pycharm的状态栏。
- 安装过程中遇到的问题:
1.按照上述步骤进行安装,如安装报错。原因多为pip没有升级为最新版本导致,,该问题是安装其他库也会遇到的问题,需在命令提示符窗口输入“python -m pip install —-upgrade pip”命令更新,如下图所示:
2.可能导致无法正常更新pip的原因是没有关闭代理服务器,2.使用命令提示符窗口安装OpenCV
更新pip的方式与上同,更新完之后,输入命令:
如图所示:pip3 install opencv-python
这里需要注意,使用windows系统自带的命令提示符窗口,安装的OpenCV对应Pycharm开发环境,使用anaconda命令提示符窗口,安装的OpenCV对应的是JupyterNoteBook和Spyder开发环境。(参考博客:在Python环境下的OpenCV安装)3.简单的图像二值化程序测试OpenCV是否正常
报错如下:import cv2 img1 = cv2.imread("E:\Download\二维码样本\二维码样本\二维码222\QR-01604.jpg") #填自己的图片路径 #灰度化处理 gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) #根据所需填充颜色,这里是填充白色,只要不是黑色(0)就填充白色(255) retval,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY) cv2.imshow("a",thresh) cv2.waitKey(0) cv2.destroyWindow()
原因:文件路径中包含中文。
修改为英文路径后,报错:
这是因为读取文件时用了“\”,在字符串中“\”被当做转义字符来使用,路径经过转义之后可能找不到文件的路径,例如’\t’转义为tab键,也存在有时候能够正常读取的可能(参考博客)。4.利用OpenCV4的QRCodeDetector进行二维码检测与解析
OpenCV4自带QRCodeDetector有两个API负责二维码检测与解析,分别为detect()函数和decode()函数,前者负责检测二维码,并返回二维码的四个顶点的坐标,后者返回二维码的最小外接矩形的顶点坐标、二维码信息。两个API如下:
解析二维码# 检测二维码 bool cv::QRCodeDetector::detect( InputArray img, OutputArray points )const #img输入图像,灰度或者彩色图像 #points 得到的二维码四个点的坐标信息
# 解析二维码
std::string cv::QRCodeDetector::decode(
InputArray img,
InputArray points,
OutputArray straight_qrcode = noArray()
)
#img输入图像,灰度或者彩色图像
#points 二维码ROI最小外接矩形顶点坐标
#qrcode 输出的是二维码区域ROI图像信息
#返回的二维码utf-8字符串
上述两个API功能,可以通过一个API来实现:
std::string cv::QRCodeDetector::detectAndDecode(
InputArray img,
OutputArray points = noArray(),
OutputArray straight_qrcode = noArray()
)
实现代码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 21 12:42:23 2022
@author: Victor
"""
import cv2
import glob
import numpy as np
#实例化
detect_obj = cv2.QRCodeDetector()
#获取固定路径下的所有jpg格式图片
path = glob.glob(r"C:\Users\Victor\Desktop\ImagesSets\*.jpg")
for i in range(len(path)):
#加载图片
img = cv2.imread(path[i])
#QR检测和解析
qr_info, points, qr_img = detect_obj.detectAndDecode(img)
#可视化检测效果,绘制其外接矩形
#cv2.drawContours(img, [np.int32(points)], 0, (0, 0, 255), 2)
#打印图片路径
print(path[i])
#打印解码信息
print('qr_info:',qr_info)
报错:
找到第QR-00041.jpg右键属性,发现不能正常处理的图片都是位深为8位的图片。
位深为24的能够正常处理,从图中也可以看出即使属性显示位深为8,仍然还是彩色,所以这也可能是不能正常读取该类图片的原因,将该类图片删掉继续进行调试。
最终代码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 21 12:42:23 2022
@author: Victor
"""
import cv2
import glob
import numpy as np
j=0 #对识别出信息的图片计数
save_path='C:\\Users\\Victor\\Desktop\\test\\'
#实例化
detect_obj = cv2.QRCodeDetector()
#获取固定路径下的所有jpg格式图片
path = glob.glob(r"C:\Users\Victor\Desktop\ImagesSets\*.jpg")
for i in range(len(path)):
#加载图片
if i<34:
img = cv2.imread(path[i])
#QR检测和解析
qr_info, points, qr_img = detect_obj.detectAndDecode(img)
#打印图片路径
print(path[i])
#打印解码信息
print('qr_info:',qr_info)
if qr_info!="":
j=j+1
#可视化检测效果,绘制其外接矩形
cv2.drawContours(img, [np.int32(points)], 0, (0, 0, 255), 2)
#批量保存检测出来并绘制外接矩形的图片
cv2.imwrite(save_path+str(i)+'.jpg', img)
print('检出个数',j,';总数为34个')
print('检测准确率为',j/34)
最终检测结果如下:
34张图片,共检测出6张。
数据集(测试用了其中的34张,共3000多张):二维码数据集
代码下载
后续工作:
- 将识别结果存到数据库或excel中。
- 增加图形界面,可以选择对指定文件夹中的图像进行识别分析。
- 识别率不是很高,需要改进。
- 需要对识别结果和实际信息进行对比。
- 增加数据集和源码链接。
评论(2)
您还未登录,请登录后发表或查看评论