bgslibrary视频前景提取算法之三帧差法(二)

2024-03-10 09:58

本文主要是介绍bgslibrary视频前景提取算法之三帧差法(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BGSLibrary:A Background Subtraction Library
The BGSLibrary was developed by Andrews Sobral and provides an easy-to-use C++ framework based on OpenCV to perform background subtraction (BGS) in videos.
github介绍及下载地址 : https://github.com/andrewssobral/bgslibrary
现有30+种视频前景提取算法,不一定最优,但可以比较效果,准备研究其中部分。

三帧差法原理,参考opencv知识库
opencv-视频处理-实时前景检测–三帧差法
仅给出算法实现部分代码 ThreeFrameDiffBGS.cpp和ThreeFrameDiffBGS.h
IBGS.h 和main函数可以参考一篇

ThreeFrameDiffBGS.cpp

#include "ThreeFrameDiffBGS.h"ThreeFrameDiffBGS::ThreeFrameDiffBGS() : firstTime(true), enableThreshold(true), threshold(15), showOutput(true)
{std::cout << "FrameDifferenceBGS()" << std::endl;
}ThreeFrameDiffBGS::~ThreeFrameDiffBGS()
{std::cout << "~FrameDifferenceBGS()" << std::endl;
}void ThreeFrameDiffBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
{if (img_input.empty())return;enableThreshold = true;threshold = 15;showOutput = true;if (img_input_prev2.empty()){img_input.copyTo(img_input_prev2);//前一帧为空时,将当前帧复制给前一帧return;}if (img_input_prev1.empty()){img_input.copyTo(img_input_prev1);//前一帧为空时,将当前帧复制给前一帧return;}//进行做差cv::absdiff(img_input_prev2, img_input_prev1, img_Differ1);cv::absdiff(img_input_prev1, img_input, img_Differ2);//先灰度化,然后用阈值提取前景背景if (img_Differ1.channels() == 3)cv::cvtColor(img_Differ1, img_Differ1, CV_BGR2GRAY);if (enableThreshold)cv::threshold(img_Differ1, img_Differ1, threshold, 255, cv::THRESH_BINARY);if (img_Differ2.channels() == 3)cv::cvtColor(img_Differ2, img_Differ2, CV_BGR2GRAY);if (enableThreshold)cv::threshold(img_Differ2, img_Differ2, threshold, 255, cv::THRESH_BINARY);//与运算cv::bitwise_and(img_Differ1, img_Differ2, img_foreground);//中值滤波//cv::medianBlur(img_foreground, img_foreground, 3);if (showOutput){namedWindow("Frame Difference", cv::WINDOW_NORMAL);cv::imshow("Frame Difference", img_foreground);}img_foreground.copyTo(img_output);img_input_prev1.copyTo(img_input_prev2);img_input.copyTo(img_input_prev1);firstTime = false;
}

ThreeFrameDiffBGS .h

#pragma once#include <iostream>
#include <opencv2/opencv.hpp>#include "IBGS.h"class ThreeFrameDiffBGS : public IBGS
{
private:bool firstTime;cv::Mat img_input_prev1;cv::Mat img_input_prev2;  //img_input_prev1的前一帧cv::Mat img_Differ1;      //differ1 = pre2 - pre1cv::Mat img_Differ2;      //differ2 = pre1 - precurrentcv::Mat img_foreground;bool enableThreshold;int threshold;bool showOutput;public:ThreeFrameDiffBGS();~ThreeFrameDiffBGS();void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);//private:
//  void saveConfig();
//  void loadConfig();
};

这篇关于bgslibrary视频前景提取算法之三帧差法(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793876

相关文章

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2