Opencv实验合集——实验七:二维码和条形码匹配

1.概念

二维码(QR码)
概念: 二维码是一种矩阵式的二维条码,由黑白方块组成,可以存储大量的信息,包括文本、链接、数字等。QR码的编码方式是在矩阵中通过不同的黑白方块组合表示不同的信息。

特点:

二维码可以存储更多的信息,适用于多种应用场景。
由于采用矩阵结构,二维码的容错性较高,即使部分损坏,仍然能够被正确识别。
OpenCV中的支持: 在OpenCV中,使用 cv2.QRCodeDetector 类可以方便地检测和解码二维码。

条形码
概念: 条形码是一种线性的、一维的编码方式,通过在一条平行线上的不同宽度的条和间隙的组合来表示信息。不同的编码规则(如Code-128、EAN-13等)决定了不同的条形码标准。

特点:

条形码通常只能存储较少的信息,主要用于标识商品、库存等。
条形码的读取速度较快,适用于快速的扫描场景。
OpenCV中的支持: 在OpenCV中,使用 cv2.BarcodeDetector 类可以方便地检测和解码多种条形码类型。

2.有关的函数方法

cv.barcode.BarcodeDetector.detectAndDecodeWithType( img[, points] ) -> retval, decoded_info, decoded_type, points

参数解释:

retval如果至少找到一个有效的条形码,则为 true
img包含条形码的灰度或彩色 (BGR) 图像。
decoded_info字符串的 UTF8 编码输出向量或字符串的空向量(如果代码无法解码)。
decoded_type字符串向量,指定这些条形码的类型
points

找到的条形码矩形的顶点的可选输出向量。如果未找到,则为空。

cv.GraphicalCodeDetector.detectAndDecode( img[, points[, straight_code]] ) -> retval, points, straight_code

参数解释:

img包含图形代码的灰度或彩色 (BGR) 图像。
decoded_infoUTF8 编码的字符串输出向量或字符串的空向量(如果代码无法解码)。
points找到的图形代码四边形的顶点的可选输出向量。如果未找到,则为空。
straight_code包含二值化代码的可选图像向量

cv提供的检测方法可能较多适用于固定图片输入进行检测,但是对于大多数场景下都是摄像头进行实时检测,这里我另外展示 pyzbar检测二维码,在pyzbar中实时检测的效果也没有想象中的好,灯光,二维码位置很大程度上影响了识别效果。

3.代码展示

import numpy as np
import cv2
def QR_DetectAndDecode(img):
    detector = cv2.QRCodeDetector()
    data, point, outimg = detector.detectAndDecode(img)
    cv2.drawContours(img, [np.int32(point)], 0, (0, 0, 255), 3)
    cv2.putText(img,data,((np.int32(point)[0][0])[0]-200,(np.int32(point)[0][0]+30)[1]-100),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,0,255),3)
    return img
def Barcode_DetectAndDecode(img):
    detector = cv2.barcode.BarcodeDetector()
    result, decoded_info, decoded_type, point = detector.detectAndDecodeWithType(img)
    print(result)
    cv2.drawContours(img, [np.int32(point)], 0, (0, 0, 255), 3)
    cv2.putText(img,decoded_info[0]+'   Type:'+decoded_type[0],((np.int32(point)[0][0])[0]-150,(np.int32(point)[0][0]+30)[1]-100),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,0,255),3)
    return img
if __name__ in '__main__':
    path = 'barcode.jpg'
    img = cv2.imread(path)
    img = cv2.resize(img, (1024,1024))
    img = Barcode_DetectAndDecode(img)
    cv2.imshow('pic', img)
    cv2.waitKey(0)





import cv2
import pyzbar.pyzbar as pyzbar

def decodeImg(image):
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    barcodes = pyzbar.decode(gray)
    for barcode in barcodes:
        (x,y,w,h) = barcode.rect
        cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)
        barcodeData = barcode.data.decode('utf-8')
        barcodeType = barcode.type
        text = '{} ({})'.format(barcodeData,barcodeType)

        cv2.putText(image,text,(x-100,y-10),cv2.FONT_HERSHEY_SIMPLEX,.5,(0,0,125),2)
    return image

def detect():
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        print('error')
    while True:
        ret, img = cap.read()
        im = decodeImg(img)
        cv2.imshow('img',im)
        if cv2.waitKey(1) &0xff == ord('q'):
            break
    cv2.destroyAllWindows()

if __name__ == "__main__":
    detect()


4.效果展示 

cv检测二维码和条形码



pyzbar摄像头检测

本次实验主要展示了cv包中的二维码和条形码检测,对于固定拍摄的图片检测效果还是较为理想,但是通过摄像头定时摄取的效果效果不理想,主要是通过用这种方法如果没有及时有二维码或条形码出现容易直接报错阻塞。

如有错误或遗漏,希望小伙伴批评指正!!!! 

希望这篇博客对你有帮助!!!!

实验六:  Opencv实验合集——实验六:模板匹配-CSDN博客

实验八:Opencv实验合集——实验八:相机校准-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/309817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP开发日志 ━━ 不同方法判断某个数组中是否存在指定的键名,测试哪种方法效率高

我们可以用isset($arr[a]) 或者 array_key_exists(a, $arr) 来判断a键名是否存在与$arr数组。 那么这两种方式哪个运行速度快呢? 不多废话了,现在我们写一段代码来测试一下: $array [a > 1, b > 2, c > 3];$start microtime(tru…

图像去雨-雨线清除-图像处理(计算机视觉作业-附代码)

图像去雨是一种图像处理技术,可以通过算法的方式去除图像中的雨滴或雨线等噪声。在实际应用中,图像去雨技术可以提高图像质量,使得图像更加清晰、自然、易于识别和理解。 通常,图像去雨技术基于计算机视觉和深度学习等技术&#…

算法与数据结构--最小生成树算法

一.应用的场景 类似于这种最小成本问题,实际上就是计算加权图把所有点连起来权重之和最小值的时候是怎么连接的。类似的问题还有最短耗时之类的问题。 二.最小生成树的定义 生成树: 图的生成树是它的一颗含有其所有顶点的无环连通子图。 【简单说就是所…

作业帮基于 DolphinScheduler 的数据开发平台实践

摘要 随着任务数量、任务类型需求不断增长,对我们的数据开发平台提出了更高的要求。本文主要分享我们将调度引擎升级到 Apache DolphinScheduler 的实践经验,以及对数据开发平台的一些思考。 1. 背景 首先介绍下我们的大数据平台架构: 数据…

在vue3+vite中使用svg-sprite-loader,antdv修改菜单icon

1. 安装 npm install vite-plugin-svg-icons -D 2. 在vite.config.js的plugins中添加配置项 import { createSvgIconsPlugin } from vite-plugin-svg-icons;createSvgIconsPlugin({iconDirs: [resolve(process.cwd(), src/components/svgIcon/svg)], // icon存放的目录&…

【Emgu.CV教程】4.4、无缝融合应用之TextureFlattening()纹理扁平化

这是无缝融合应用的最后一篇,TextureFlattening()函数,专门用于对图像指定部位进行纹理扁平化的。这个功能现在讲起来有点太早了,应该放到《图像的空间滤波--平滑》这一章节中才合适。因为它就是用Sobel算子进行平滑,也就是在保留…

API(Date类,SimpleDateFormat类,Calendar类,JDK8时间相关类,包装类,算法小题)

文章目录 【常用API】今日内容教学目标 第一章 Date类1.1 Date概述1.2 Date常用方法 第二章 SimpleDateFormat类2.1 构造方法2.2 格式规则2.3 常用方法2.4 练习1(初恋女友的出生日期)2.5 练习2(秒杀活动) 第三章 Calendar类3.1 概述3.2 常用方法3.3 get方法示例3.4 set方法示例…

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【E…

CSS3实现轮播效果

在我们不使用JS的情况下&#xff0c;是否也可以实现轮播功能呢&#xff1f; 答应是可以的 上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>轮播</title><style>.boss…

⭐Unity 将电脑打开的窗口画面显示在程序中

1.效果&#xff1a; 下载资源包地址&#xff1a; Unity中获取桌面窗口 2.下载uWindowCapturev1.1.2.unitypackage 放入Unity工程 3.打开Single Window场景&#xff0c;将组件UwcWindowTexture的PartialWindowTitle进行修改&#xff0c;我以腾讯会议为例 感谢大家的观看&#xf…

QT开发 2024最新版本优雅的使用vscode开发QT

▬▬▬▬▬▶VS开发QT◀▬▬▬▬▬ &#x1f384;先看效果 &#x1f384;编辑环境变量 如图添加环境变量&#xff01;&#xff01;&#xff01; 东西全在QT的安装目录&#xff01;&#xff01;&#xff01; 找到的按照我的教程再装一次&#xff01;&#xff01;&#xff01; 点…

如何给AVR16芯片解锁

AVRM16核心板本身集成了强大的芯片自解锁功能模块&#xff0c;当由于熔丝位设置错误&#xff0c;导致芯片锁死&#xff0c;无法正常使用时候&#xff0c;可以利用畅学AVR16核心板上的解锁功能给芯片解锁。 &#xff08;如果芯片没有锁死&#xff0c;可以跳过此步骤&#xff09…

yolov5无人机视频检测与计数系统(创新点和代码)

标题&#xff1a;基于YOLOv5的无人机视频检测与计数系统 摘要&#xff1a; 无人机技术的快速发展和广泛应用给社会带来了巨大的便利&#xff0c;但也带来了一系列的安全隐患。为了实现对无人机的有效管理和监控&#xff0c;本文提出了一种基于YOLOv5的无人机视频检测与计数系…

排序之插入排序

在计算机科学中&#xff0c;排序算法是一种将一组元素按照某种特定顺序排列的方法。插入排序是一种简单且易于理解的排序算法&#xff0c;它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而得到一个新的、记录数增1的有序表。 基本思想 插入排序的基本思想…

Ubuntu 20.04 Intel RealSense D435i 相机标定教程

下载编译code_utils mkdir -p ~/imu_catkin_ws/src cd ~/imu_catkin_ws/src catkin_init_workspace source ~/imu_catkin_ws/devel/setup.bash git clone https://github.com/gaowenliang/code_utils.git cd .. catkin_make报错&#xff1a;sumpixel_test.cpp:2:10: fatal err…

计算机网络 物理层

文章目录 物理层物理层的基本概念数据通信的基础知识数据通信系统的模型有关信道的几个基本概念信道的极限容量 物理层下面的传输媒体导引型传输媒体非引导型传输媒体 信道复用技术波分复用码的复用 宽带接入技术ADSL 技术光纤同轴混合网 (HFC 网&#xff09;FTTx 技术 物理层 …

基于sprinmgboot实习管理系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;实习管理也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而实习管理…

新生儿成长的阳光之钙:补充注意事项指南

引言&#xff1a; 钙是新生儿骨骼发育不可或缺的重要元素&#xff0c;对于宝宝的生长发育起着至关重要的作用。本文将深入探讨钙的功能、补充时机&#xff0c;以及在给新生儿补充钙时应该注意的事项&#xff0c;为小天使们提供最贴心的呵护。 第一部分&#xff1a;钙的重要性与…

【python入门】day21:向文件输出“奋斗成就更好的你”、输出北京的天气预报

向文件输出“奋斗成就更好的你” #向文件输出‘奋斗成就更好的你’ 第一种方式&#xff1a;使用print方式进行输出&#xff08;输出目的地是文件&#xff09; fpopen(e:/text.txt,w)#w只写模式&#xff0c;也可以用a读写模式 print(奋斗成就更好的你,filefp) fp.close() 第二种…

创建EasyCodeMybatisCodeHelperPro模板文件用于将数据库表生成前端json文件

在intellij idea中&#xff0c;通过插件EasyCodeMybatisCodeHelperPro&#xff0c;从现有的模板文件中选择一个复制粘贴&#xff0c;然后稍为修改&#xff0c;即可得到一个合适的模板文件。 现在的前端&#xff0c;越来越像后端。TypeScript替代了JavaScript&#xff0c;引入了…