opencv检测二维码和条形码

这篇具有很好参考价值的文章主要介绍了opencv检测二维码和条形码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 excel制作简单二维码

使用excel可以实现制作二维码,但只能实现做英文和数字类型的,步骤如下:

  1. 在任意单元格输入内容
    opencv检测二维码和条形码

  2. 选项卡里找到开发工具—插入—点击ActiveX控件的最右下角。
    opencv检测二维码和条形码

  3. 弹出的窗口内,往下滑动选择Microsoft BarCode Control 16.0后,点击确定。
    opencv检测二维码和条形码

  4. 在任意区域,摁住鼠标左键不放,拖动鼠标,画出合适大小的矩形,松开鼠标,即可获得一个条形码。
    opencv检测二维码和条形码

  5. 右击条形码,选择属性,点击自定义右边“…”,弹窗内的样式,选择最后一个“11 - QR Code”,点击确定。
    opencv检测二维码和条形码

  6. 回到属性,找到"LinledCell",输入前面有内容的单元格位置
    opencv检测二维码和条形码

  7. 得到二维码

打个水印,二维码直接发出会违规QAQ

2 识别二维码和条形码

2.1 相关库

安装所使用的库

! 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)

实现结果为:

打个水印,二维码直接发出会违规QAQ

3 完整代码

3.1 使用图片进行识别

import cv2
import numpy as np
from pyzbar.pyzbar import decode

img = cv2.imread('code.png')
result = decode(img)

with open('myDataList.txt') as f:
    myDataList = f.read().splitlines()
    print(myDataList)

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)
cv2.waitKey(0)

3.2 使用摄像头实时识别

import cv2
import numpy as np
from pyzbar.pyzbar import decode
 
# 导入摄像头
cap = cv2.VideoCapture(0)
cap.set(3, 320) #摄像头的宽度
cap.set(4, 320) #摄像头的高度
cap.set(10, 100) #摄像头的亮度
 
with open('myDataList.txt') as f:
    myDataList = f.read().splitlines()
 
while True:
    success, img = cap.read()
    for barcode in decode(img):
        myData = barcode.data.decode('utf-8')
        print(myData)
 
        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)
        pts = pts.reshape((-1, 1, 2))
        cv2.polylines(img, [pts], True, myColor, 5)
        pts2 = barcode.rect
        cv2.putText(img, myOutPut, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, myColor, 2)
    cv2.imshow("Result",img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
IMPLEX, 0.9, myColor, 2)
    cv2.imshow("Result",img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

4 总结

二维码检测与识别是计算机视觉领域中的一个重要任务,它旨在从图像或视频中检测、定位和解析出二维码信息。
在实现二维码检测与识别的过程中,我们可以借助开源工具库,如OpenCV和ZBar,利用图像处理、特征提取和分类器训练等技术来实现。文章来源地址https://www.toymoban.com/news/detail-498493.html

到了这里,关于opencv检测二维码和条形码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MAUI】条形码,二维码扫描功能

    本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。 移动端的扫描条形码、二维码的功能已经随处可见,已经很难找到一个不支持扫描的App了,但是微软的MAUI竟然没有提供,那么我们应该如何实现呢?

    2024年02月04日
    浏览(27)
  • 【Android】实现生成二维码、条形码和扫描二维码的功能

    目录 一、添加依赖 二、布局文件 三、实现生成二维码的功能 四、效果图 要先添加一个第三方库来实现二维码的生成以及扫描二维码的功能,开源库如下: 在build.grade(Moudle)中添加依赖: 效果如下: activity_main.xml: MainActivity.java: 简单粗暴! 感谢ლ(°◕‵ƹ′◕ლ)!!!

    2024年02月11日
    浏览(44)
  • java生成、识别条形码和二维码

    使用 zxing 开源库 Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix 位图矩阵 MultiFormatWriter 位图编写器 MatrixToImageWriter 写入图片 可以生成、识别条形码和二维码 内置三种尺寸: enum Size {SMALL, MIDDLE, BIG} 依赖 将宽度不等的多个黑条和白条,按照一定

    2024年02月08日
    浏览(34)
  • uniapp写微信小程序实现二维码条形码扫描识别

    1.最重要的就是一个函数uni.scanCode() 下边是我的代码可以直接使用 上述代码就直接实现了扫描功能很简单记得定义下扫描结果!有啥问题随时@我

    2024年04月09日
    浏览(42)
  • 【C#】最全单据打印源码(打印模板、条形码&二维码、字体样式)

    【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663 【C#】组件化开发,调用dll组件方法 本文链接

    2024年02月03日
    浏览(34)
  • flutter开发实战-flutter二维码条形码扫一扫功能实现

    flutter开发实战-flutter二维码条形码扫一扫功能实现 flutter开发实战-flutter二维码扫一扫功能实现,要使用到摄像头的原生的功能,使用的是插件:scan 效果图如下 1.1 iOS权限设置 1.2 android权限设置 1.3 使用ScanView的widget 扫一扫Widget使用ScanController来做响应的控制 暂停/恢复camera 识

    2024年02月16日
    浏览(33)
  • openmv和STM32串口通信识别条形码、二维码(HAL库)

    因为自己的毕设用到了条形码识别,所以在这里写一篇关于使用openmv识别条形码和二维码并且与STM32实现串口通讯,希望能帮到以后用到这一模块的同学,STM32方面我使用的是STM32F103RCT6,并且使用HAL进行编写代码。 OpenMV端:由图知UART_RX—P5 ------ UART_TX—P4 2.STM32端:这里我使用

    2023年04月13日
    浏览(36)
  • C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

      概述: 本教程使用OpenCvSharp和ZXing库,详细介绍了在C#中识别二维码和条形码的步骤。通过导入必要的命名空间、加载图像,并使用ZXing库进行二维码和条形码的识别,提供了清晰的示例代码。这方便了开发人员在项目中集成二维码和条形码识别功能。 要使用OpenCvSharp来分别

    2024年03月09日
    浏览(53)
  • vue - H5 移动端网页中调用手机摄像头扫描二维码 / 条形码功能,在h5手机网页里调起相机摄像头进行二维码或条形码扫描效果详细教程(详细示例组件源码,一键复制开箱即用!)

    实现了在vue2、vue3网页项目中,实现调起手机摄像头进行扫描二维码或者条码,可自定义样式。 直接复制组件代码,然后根据你的需求改一下。

    2024年02月16日
    浏览(37)
  • opencv_04条形码区域分割

    基于OpenCV的条形码区域分割 要基于OpenCV实现条形码区域分割,可以按照以下步骤进行: 加载图像:使用OpenCV中的imread函数读取待处理图像。 灰度化:使用OpenCV中的cvtColor函数将彩色图像转换为灰度图像。 边缘检测:使用OpenCV中的Canny函数对灰度图像进行边缘检测,得到二值

    2024年02月06日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包