返回顶部
首页 > 资讯 > 精选 >OpenCV如何使用BSM统计视频中移动的对象
  • 100
分享到

OpenCV如何使用BSM统计视频中移动的对象

2023-07-05 04:07:26 100人浏览 独家记忆
摘要

本文小编为大家详细介绍“OpenCV如何使用BSM统计视频中移动的对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“OpenCV如何使用BSM统计视频中移动的对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1

本文小编为大家详细介绍“OpenCV如何使用BSM统计视频中移动的对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“OpenCV如何使用BSM统计视频中移动的对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1、概述

案例:使用BackgroundSubstractor实现视频中移动对象统计

实现步骤:

实例化VideoCapture

创建BackgroundSubstractor

while循环读取视频帧

使用BS->apply获取mask

对mask进行二值化及形态学操作

使用findContours执行轮廓发现

统计最大外接矩形

输出结果

ps:这个算法的抗干扰能力比较差,要相出正确的结果,必须要对frame进行预处理。或者提升视频的质量才行。不然只能得到一个错误的结果

2、代码示例

Move_Video_Object_Tracking::Move_Video_Object_Tracking(QWidget *parent)    : MyGraphicsView{parent}{    this->setWindowTitle("视频中移动对象统计");    QPushButton *btn = new QPushButton(this);    btn->setText("选择视频");    connect(btn,&QPushButton::clicked,[=](){        choiceVideo();    }); }  void Move_Video_Object_Tracking::choiceVideo(){    path = QFileDialog::getOpenFileName(this,"请选择视频","/Users/yangwei/Downloads/",tr("Image Files(*.mp4 *.avi)"));    qDebug()<<"视频路径:"<<path;    showMoveVideoObjectTracking(path.toStdString().c_str());} void Move_Video_Object_Tracking::showMoveVideoObjectTracking(const char* filePath){    VideoCapture capture;    capture.open(filePath);     if(!capture.isOpened()){        qDebug()<<"无法加载视频文件";        return;    }    Ptr<BackgroundSubtractor> mogSubstractor = createBackgroundSubtractORMOG2();    Mat frame,gauss,mask;    Mat kernel = getStructuringElement(MORPH_RECT,Size(3,3));    int count=0;    char text[8];    while(capture.read(frame)){        GaussianBlur(frame,gauss,Size(5,5),0,0);        mogSubstractor->apply(gauss,mask);//获取mask        threshold(mask,mask,0,255,THRESH_BINARY|cv::THRESH_OTSU);        //执行形态学操作        morphologyEx(mask,mask,MORPH_OPEN,kernel);        dilate(mask,mask,kernel,Point(-1,-1));        imshow("mask",mask);         //找到最大轮廓定位外接矩形        vector<vector<Point>> contours;        vector<Vec4i> heri;        //寻找最大外接矩形        findContours(mask,contours,RETR_EXTERNAL,CHaiN_APPROX_SIMPLE);        count = 0;        for(size_t i = 0;i<contours.size();i++){            double area = contourArea(contours[i]);            if(area<5000){                continue;            }            Rect rect = boundingRect(contours[i]);            qDebug()<<rect.width<<":"<<rect.height;            if (rect.width < 200 || rect.height < 100) continue;            count++;            rectangle(frame,rect,Scalar(0,0,255),3,8);            sprintf(text,"%d",count);            putText(frame,text,Point(rect.x+rect.width/2,rect.y+rect.height/2),FONT_ITALIC, FONT_HERSHEY_PLAIN,Scalar(0,255,0),2,8);        }          imshow("frame",frame);         int c = waiTKEy(1);        if(c==27){            break;        }    }    capture.release(); }

读到这里,这篇“OpenCV如何使用BSM统计视频中移动的对象”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: OpenCV如何使用BSM统计视频中移动的对象

本文链接: https://lsjlt.com/news/349537.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • OpenCV使用BSM统计视频中移动的对象
    目录1、概述2、代码示例3、演示图片1、概述 案例:使用BackgroundSubstractor实现视频中移动对象统计 实现步骤: 1.实例化VideoCapture 2.创建Ba...
    99+
    2023-02-21
    OpenCV BSM统计视频移动对象 OpenCV BSM统计视频对象 OpenCV BSM
  • OpenCV如何使用BSM统计视频中移动的对象
    本文小编为大家详细介绍“OpenCV如何使用BSM统计视频中移动的对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“OpenCV如何使用BSM统计视频中移动的对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1...
    99+
    2023-07-05
  • 如何使用使用python+opencv解析视频并处理视频中的水印
    本篇内容主要讲解“如何使用使用python+opencv解析视频并处理视频中的水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用使用python+opencv解析视频并处理视频中的水印”...
    99+
    2023-06-02
  • 如何使用Python的OpenCV库处理图像和视频
    目录介绍计算机视觉OpenCV应用:安装使用 OpenCV 处理图像1. 从文件中读取图像2. 调整图像大小:3. 旋转图像4. 翻转图像:5. 重写图像6. 裁剪图像7. 绘制形状...
    99+
    2024-04-02
  • 如何使用python实现监控视频人数统计
    小编给大家分享一下如何使用python实现监控视频人数统计,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、图示客户端请求输入一段视频或者一个视频流,输出人数或其他目标数量,上报给上层服务器端,即提供一个http API调...
    99+
    2023-06-15
  • 如何使用Python中的面向对象设计模式
    如何使用Python中的面向对象设计模式,需要具体代码示例概述:在Python编程中,面向对象设计模式是非常重要的一个概念。它提供了一种结构化的方法来解决问题,并使得代码更易于理解、维护和扩展。本文将介绍几种常见的面向对象设计模式,并提供具...
    99+
    2023-10-22
    Python 设计模式 面向对象
  • 详解Python使用OpenCV如何确定一个对象的方向
    目录1.代码实现2.输出图像3.了解坐标轴4.计算0到180度之间的方向在本教程中,我们将构建一个程序,该程序可以使用流行的计算机视觉库 OpenCV 确定对象的方向(即以度为单位的...
    99+
    2024-04-02
  • HTML5中的Blob对象如何使用
    本篇内容主要讲解“HTML5中的Blob对象如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中的Blob对象如何使用”吧! HTML5中的Bl...
    99+
    2024-04-02
  • javascript中的History对象如何使用
    这篇文章主要介绍“javascript中的History对象如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript中的History对象如何使用”文章能帮助大家解决问题。leng...
    99+
    2023-06-17
  • 如何使用ADO.NET中的DataRelation对象
    这篇文章给大家分享的是有关如何使用ADO.NET中的DataRelation对象的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ADO.NET 数据服务框架支持具象状态传输 (REST) 语义以外的功能。例如,服务...
    99+
    2023-06-17
  • JS中的Map对象如何使用
    这篇文章主要讲解了“JS中的Map对象如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS中的Map对象如何使用”吧!JS中的Map对象js创建map对象var map&nb...
    99+
    2023-07-05
  • 如何在 Windows 系统中使用 Go 文件对象?
    在 Go 语言中,文件是一种常见的数据源和数据输出方式。Go 语言提供了一些操作文件的基本函数和类型,其中最基本的就是文件对象。文件对象是在程序中表示一个文件的结构体,通过文件对象可以进行文件的读取、写入、关闭等操作。本文将介绍如何在 W...
    99+
    2023-10-29
    文件 windows 对象
  • Java中如何使用Bash中的Path对象?
    在Bash中,Path对象表示一个文件路径,可以对文件路径进行各种操作,比如获取文件名、获取文件父目录等等。在Java中,也可以使用Path对象来对文件路径进行操作,Java中的Path对象是由java.nio.file.Path类实现的...
    99+
    2023-09-21
    path 对象 bash
  • Bash中如何使用Java的Path对象?
    Bash是一种流行的Unix shell,可以用于执行命令和脚本。而Java是一种高级编程语言,常用于构建Web应用程序和桌面应用程序。在某些情况下,需要在Bash中使用Java中的某些功能,例如Java的Path对象。 Java的Pat...
    99+
    2023-09-21
    path 对象 bash
  • Java中的对象数组如何使用
    在Java中,对象数组的使用与其他类型的数组类似,但需要注意的是,对象数组中存储的是对象的引用,而不是对象本身。要创建一个对象数组,...
    99+
    2023-08-15
    Java
  • python如何自动爬取B站CXK的NBA形象大使的全部鬼畜视频
    这篇文章给大家介绍python如何自动爬取B站CXK的NBA形象大使的全部鬼畜视频,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近CXK的工作室告了B站,然后被B站的各路大神鬼畜恶搞,哈哈哈,至少有几十个版本,啧啧,...
    99+
    2023-06-02
  • 数据库中如何使用数据字典视图管理对象
    小编给大家分享一下数据库中如何使用数据字典视图管理对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一、数据字典的分类 1...
    99+
    2024-04-02
  • Java中的对象是如何在NPM中使用的?
    随着Node.js的流行,越来越多的Java开发者开始将自己的代码转移到这个平台上。在Node.js中,有一个流行的包管理器叫做NPM(Node Package Manager)。那么,在Java中的对象是如何在NPM中使用的呢?本文将为...
    99+
    2023-08-19
    对象 npm apache
  • 如何在Linux系统中高效使用PHP中的数组和对象?
    在Linux系统中使用PHP的数组和对象是Web开发中非常常见的任务。这些数据结构非常有用,因为它们可以存储和操作大量的数据。但是,如果不知道如何高效地使用它们,就会浪费大量的时间和资源。在本文中,我们将探讨如何在Linux系统中高效使用P...
    99+
    2023-08-24
    linux 数组 对象
  • 如何在Windows系统中使用Go语言创建对象?
    Go语言是一种简单、高效、并发的编程语言,越来越多的程序员开始使用它来开发应用程序。如果你想在Windows系统中使用Go语言创建对象,本文将为你提供详细的指导和演示代码。 一、Go语言简介 Go语言是由Google公司开发的一种编程语言...
    99+
    2023-10-18
    对象 bash windows
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作