opencv检测二维码和条形码 |
您所在的位置:网站首页 › opencv识别硬币 › opencv检测二维码和条形码 |
文章目录
1 excel制作简单二维码2 识别二维码和条形码2.1 相关库2.2 decode解码2.3 圈出二维码的位置2.4 判断二维码是否授权
3 完整代码3.1 使用图片进行识别3.2 使用摄像头实时识别
4 总结
1 excel制作简单二维码
使用excel可以实现制作二维码,但只能实现做英文和数字类型的,步骤如下: 在任意单元格输入内容 选项卡里找到开发工具—插入—点击ActiveX控件的最右下角。 弹出的窗口内,往下滑动选择Microsoft BarCode Control 16.0后,点击确定。 在任意区域,摁住鼠标左键不放,拖动鼠标,画出合适大小的矩形,松开鼠标,即可获得一个条形码。 右击条形码,选择属性,点击自定义右边“…”,弹窗内的样式,选择最后一个“11 - QR Code”,点击确定。 回到属性,找到"LinledCell",输入前面有内容的单元格位置 得到二维码 安装所使用的库 ! pip install --user opencv-contrib-python ! pip install --user pyzbar引入所用的库 import cv2 import numpy as np from pyzbar.pyzbar import decode 2.2 decode解码使用decode函数对二维码的图片进行解码,会看到结果会出现以下一些参数。其中,data代表二维码的内容;type代表是条形码还是二维码类型;rect代表二维码轮廓的信息;polygon二维码轮廓的位置,从左上角逆时针旋转。 img = cv2.imread('code.png') result = decode(img) print(result)结果为: [Decoded(data=b’1230V’, type=‘QRCODE’, rect=Rect(left=34, top=33, width=193, height=187), polygon=[Point(x=34, y=33), Point(x=34, y=220), Point(x=227, y=220), Point(x=227, y=33)], quality=1, orientation=‘UP’)] 利用循环分别获取解码出来的信息: for barCode in result: print(barCode.data) print(barCode.rect) print(barCode.polygon)结果为: b’1230V’ Rect(left=34, top=33, width=193, height=187) [Point(x=34, y=33), Point(x=34, y=220), Point(x=227, y=220), Point(x=227, y=33)] 发现会出现“ b’168Qr’ ”,b代表它是以字节为单位。想要去掉这个“b”,那么需要进行解码。 for barCode in result: print(barCode.data) myData = barCode.data.decode('utf-8') print(myData)运行结果如下: b’1230V’ 1230V 得出结论:解码成功 2.3 圈出二维码的位置解码结束后,在图片上显示出二维码的位置和二维码的内容。 根据解码后的polygon返回值,框出二维码。 for barCode in result: myData = barCode.data.decode('utf-8') pts = np.array([barCode.polygon], np.int32) # 创建一个int32数据类型的二维码轮廓数组 pts = pts.reshape((-1, 1, 2)) # 自适应维度大小 cv2.polylines(img, [pts], True, (255, 0, 255), 5)cv2.polylines(): cv2.polylines(img, pts, isClosed, color, thickness) 其中,pts: 折线顶点数组;isClosed:是否是闭合折线(多边形) 根据解码后的rect返回值,确定二维码内容放置的位置。 pts2 = barCode.rect cv2.putText(img, myData, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 255), 2)cv.putText(img, text, org, fontFace,fontScale,color[, thickness[, lineType[, bottomLeftOrigin]]]) 其中,参数依次为:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细 2.4 判断二维码是否授权先在当前文件夹内创建一个文本文件,里面输入一些授权的二维码内容。 with open('myDataList.txt') as f: myDataList = f.read().splitlines() print(myDataList)根据二维码的内容来判断是否授权。如果二维码的内容在这个文本文件内,那么输出“Authorized”,而且框二维码的线条为绿色;如果二维码的内容不在这个文本文件内,那么输出“Un-Authorized”,而且框二维码的线条为红色。 for barCode in result: myData = barCode.data.decode('utf-8') if myData in myDataList: myOutPut = "Authorized" myColor = (0, 255, 0) else: myOutPut = "Un-Authorized" myColor = (0, 0, 255) pts = np.array([barCode.polygon], np.int32) # 创建一个int32数据类型的二维码轮廓数组 pts = pts.reshape((-1, 1, 2)) # 自适应维度大小 cv2.polylines(img, [pts], True, myColor, 5) pts2 = barCode.rect cv2.putText(img, myData, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, myColor, 2) cv2.imshow('22', img)实现结果为: 二维码检测与识别是计算机视觉领域中的一个重要任务,它旨在从图像或视频中检测、定位和解析出二维码信息。 在实现二维码检测与识别的过程中,我们可以借助开源工具库,如OpenCV和ZBar,利用图像处理、特征提取和分类器训练等技术来实现。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |