背景减除(1)--bgslibrary Windows编译和使用

入侵监控领域中,在固定场景下,需要检测和监控的入侵物体种类繁多,无法具体穷尽。传统的CV算法提取的特征应用场景有限,无法完成大量物体的监控;深度学习目标检测方法没法收集到无穷无尽的物体种类,因此监督效果仅限于编著物体,且适应性因场景变化而变化;异常检测方案,因为场景随着天气、光照的变化,无法行之有效的判断出异常物体的位置,并有时甚至出现误判断。

背景减除算法,通过学习固定场景下不变的背景,利用当前帧的的数据与背景的差分,可以很容易得到前景,在无需分类的场景下得到广泛应用。

这里推荐一个宝藏github主的分享,对于学习背景建模相关的东西很有帮助。https://github.com/murari023/awesome-background-subtraction/blob/master/README.md#projects

GitHub - andrewssobral/bgslibrary: A C++ Background Subtraction Library with wrappers for Python, MATLAB, Java and GUI on QT

一、bgslibrary库的下载

使用背景建模基本都会使用到两个库,一个是opencv里面关于background subtraction相关的库,另一个就是bgslibrary,其链接地址如下: 

https://github.com/andrewssobral/bgslibrary 

该库是由Andrews Sobral 于2012年开始编写的,主要使用C++语言,结合opencv进行编写完成,当前还适配python、java、matlab等语言。最新release的算法版本总计实现了43个算法,针对不同版本的opencv,所能适配的和使用的背景建模算法均不一致,下图为部分示例。

 可以通过上述github链接直接下载bgslibrary,然后解压到自己的盘符中存放

二、bgslibrary库的编译

编译的具体步骤可以参考如下链接:https://github.com/andrewssobral/bgslibrary/wiki/Installation-instructions---Windows

首先打开cmd,确认电脑已经安装cmake相关的软件。

解压已经下载到本地的bgslibrary库,然后cd进入bgslibrary

 进入C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build,并点击运行vcvars64.bat文件,需要管理员权限才能正常运行

 设置opencv库的安装目录:

切换到编译目录bgslibrary/build下;

调用cmake命令进行安装编译,编译命令如下所示:

cmake -DOpenCV_DIR="D:\personal\personal\opencv\build" -G "Visual Studio 16 2019" ..

配置成功出现如下所示显示结果。

最后使用visual studio 2019 打开稀土中的sln文件,选择你需要的编译库的类型(例如X64+debug或者X64+release),直接点击build编译即可。编译完成后可以在build文件夹中生成bgslibrary_core.lib以及bgslibrary_core.dll文件。

三、bgslibrary库的使用

首先,新建一个工程,取一个工程名称,将bgslibrary库下面的src文件夹拷贝到本工程目录下,将编译生成的lib以及dll拷贝到本工程下的lib文件以及工程下,具体如下图所示。

接着,在包含目录中配置opencv和bgs库的头文件目录,库目录中包含opencv和bgs库的库目录所在位置,如下所示:

在链接器中增加opencv_world470d.lib以及bgslibrary_core.lib

新建一个main.cpp,加入如下代码:

 

#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include"../src/algorithms/algorithms.h"auto algorithmsName = BGS_Factory::Instance()->GetRegisteredAlgorithmsName();int main() {std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl;std::cout << "Number of available algorithms: " << algorithmsName.size() << std::endl;std::cout << "List of available algorithms:" << std::endl;std::copy(algorithmsName.begin(), algorithmsName.end(), std::ostream_iterator<std::string>(std::cout, "\n"));/*List of all algorithms:(Note that some of these algorithms are available only for a specific version of OpenCV, see algorithms.h)AdaptiveBackgroundLearning,AdaptiveSelectiveBackgroundLearning,CodeBook,DPAdaptiveMedian,DPEigenbackground,DPGrimsonGMM,DPMean,DPPratiMediod,DPTexture,DPWrenGA,DPZivkovicAGMM,FrameDifference,FuzzyChoquetIntegral,FuzzySugenoIntegral,GMG,IndependentMultimodal,KDE,KNN,LBAdaptiveSOM,LBFuzzyAdaptiveSOM,LBFuzzyGaussian,LBMixtureOfGaussians,LBP_MRF,LBSimpleGaussian,LOBSTER,MixtureOfGaussianV2,MixtureOfGaussianV1,MultiCue,MultiLayer,PAWCS,PixelBasedAdaptiveSegmenter,SigmaDelta,StaticFrameDifference,SuBSENSE,T2FGMM_UM,T2FGMM_UV,T2FMRF_UM,T2FMRF_UV,TwoPoints,ViBe,VuMeter,WeightedMovingMean,WeightedMovingVariance*/std::string algorithmName = "KNN";//int cameraIndex = 0;//if (argc > 1) algorithmName = argv[1];//if (argc > 2) cameraIndex = std::stoi(argv[2]);std::string video_path = "./00010000684000000_4.mp4";cv::VideoCapture capture;capture.open(video_path);if (!capture.isOpened()) {std::cerr << "Cannot initialize web camera!" << std::endl;return -1;}std::cout << "Running " << algorithmName << std::endl;auto bgs = BGS_Factory::Instance()->Create(algorithmName);cv::Mat img_input;auto key = 0;std::cout << "Press 's' to stop:" << std::endl;while (key != 's') {// Capture frame-by-framecapture >> img_input;if (img_input.empty()) break;// Resize input frame for better visualizationcv::resize(img_input, img_input, cv::Size(380, 240), 0, 0, CV_INTER_LINEAR);cv::imshow("input", img_input);cv::Mat img_mask;cv::Mat img_bkgmodel;try {// by default, bgs->process(...) shows automatically the foreground mask image// or you can disable it by: bgs->setShowOutput(false);bgs->process(img_input, img_mask, img_bkgmodel);if(!img_mask.empty())cv::imshow("Foreground", img_mask);//  ....do something else...}catch (std::exception& e) {std::cout << "Exception occurred" << std::endl;std::cout << e.what() << std::endl;}key = cv::waitKey(33);}cv::destroyAllWindows();capture.release();return 0;}

运行本程序,可以看到结果如下所示:

---------------------------------------------------END----------------------------------------------------- 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言----strcpy和strcat的使用和模拟实现

一&#xff0c;strcpy()函数 strcpy() 函数是 C语言中一个非常重要的字符串处理函数&#xff0c;其功能是将一个字符串复制到另一个字符串中。该函数原型如下&#xff1a; char*strcpy(char*dest,const char*src) 其中&#xff0c;dest 表示目标字符串&#xff0c;即将被复制到…

亿级数据库迁移、分库分表、实践

什么时候需要进行数据库迁移 1、业务数据增长&#xff0c;原数据库不足以支持业务需求 2、底层存储架构遇见瓶颈&#xff0c;需升级改造 3、老系统升级过度新系统 迁移过程中会面临哪些挑战或问题 1、数据库表完全异构、旧库和新库表结构完全不同 2、业务方&#xff0c;需要…

日常工作中时间管理的方法学习总结

时间管理的意义 时间管理是一种非常重要的个人职业技能&#xff0c;它可以帮助人们更有效地使用时间&#xff0c;达成目标。 通常可以基于这四个过程进行管理&#xff0c;分别是确定目标、制定计划、落实执行、回顾结果。 确定目标 要管理好目标&#xff0c;通过SMART原则有…

GCC指令生成 Map映射文件

示例&#xff1a; gcc -g -Wl,-Mapoutput.map -o myprogram myprogram.c在这个例子中&#xff0c; -g 表示生成调试信息-Wl,-Mapoutput.map 告诉链接器生成一个名为 output.map 的映射文件-o myprogram 指定最终的可执行文件名称为 myprogram&#xff0c;最后的 myprogram.c …

【HDFS】DatanodeAdminBackoffMonitor退役节点极慢的问题定位

一、现象: 下节点特别慢。10台节点,每台大约需要退役60w个块。但是3个小时才退役了3000多个块。 NN侧如下日志,可以看到30秒只退役了512-494 = 20个块,这要是退役600w个块,得猴年马月? 2024-03-19 14:44:42,952 INFO org.apache.hadoop.hdfs.server.blockmanagement.D…

浅析扩散模型与图像生成【应用篇】(十一)——DDIBs

11. Dual Diffusion Implicit Bridges for Image-to-Image Translation 该文提出一种双扩散隐式桥&#xff08;Dual Diffusion Implicit Bridges&#xff0c; DDIBs&#xff09;方法用于图像转换&#xff0c;其最大的特点在于处理源域图像的模型和处理目标域图像的模型是彼此分…

android支持包com.android.support:support-v4 依赖树,便于分析类冲突问题

执行如下依赖分析指令可以打印依赖树 sh gradlew -q app:dependenciescom.android.support:support-v4:28.0.0 是一个非常庞大的支持库&#xff0c;依赖的东一比较多下面看看详情&#xff1a;standard_testReleaseUnitTestRuntimeClasspath - Resolved configuration for runti…

Modbus TCP协议介绍(ModbusTCP)

文章目录 理解Modbus TCP协议&#xff08;Understanding Modbus TCP Protocol&#xff09;简介&#xff08;Introduction to Modbus TCP&#xff09;历史背景&#xff08;Historical Context&#xff09;关键特性&#xff08;Key Features&#xff09; Modbus TCP协议结构&…

华为防火墙二层墙(VAN/SVI/单臂路由)

二层墙只能做地址池形式的NAT。 交换机安全策略防火墙二层墙 路由器安全策略防火墙三层墙 交换机的光口是不能直接插线的&#xff0c;光模块&#xff0c;包括进和出 长距离&#xff1a;单模 短距离&#xff1a;多模 防火墙自身的ping流量需要单独配置

深度学习中不同的优化器汇总(SGD、动量、Adagrad、RMSProp、Adam)(理论、公式、代码)

本文针深度学习中不同的优化器进行了汇总&#xff0c;包括公式实现、代码示例、演变过程和优缺点做了较为详细的分析。 随机梯度下降&#xff08;SGD&#xff09; 随机梯度下降&#xff08;SGD&#xff09;是一种简单但极其有效的优化算法&#xff0c;经常用于训练各种类型的…

卷积和池化

卷积&#xff1a; 就是有一个卷积核&#xff0c;还有一个x*x的图片&#xff0c;卷积核大小是y*y的话&#xff0c;对图像做卷积就是将图片中和卷积核大小一样的部分进行运算&#xff0c;也就是相乘求和&#xff0c;有点类似算法中的滑动窗口&#xff0c;只不过这里是二维滑动窗…

一篇复现Docker镜像操作与容器操作

华子目录 Docker镜像操作创建镜像方式1docker commit示例 方式2docker import示例1&#xff1a;从本地文件系统导入示例2&#xff1a;从远程URL导入注意事项 方式3docker build示例1&#xff1a;构建镜像并指定名称和标签示例2&#xff1a;使用自定义的 Dockerfile 路径构建镜像…

Unity连接MySQL踩坑,问题处理记录

用的unity2021版本&#xff0c;MySQL是官方下载的最新版8.0.36. 安装MySQL时&#xff0c;过去如果安装过&#xff0c;一定要删干净&#xff0c;单纯的卸载不行&#xff0c;网上有很多教程。 MySQL安装完成后&#xff0c;将安装目录的MySql.Data.dll文件放入unity项目的Plugin…

数据运营常用的8大模型

✅作者简介&#xff1a;《数据运营&#xff1a;数据分析模型撬动新零售实战》作者、《数据实践之美》作者、数据科技公司创始人、多次参加国家级大数据行业标准研讨及制定、高端企培合作讲师。 &#x1f338;公众号&#xff1a;风姑娘的数字视角&#xff0c;免费分享数据应用相…

202447读书笔记|《围炉夜话》——多记先正格言,胸中方有主宰 闲看他人行事,眼前即是规箴

202447读书笔记|《围炉夜话》——多记先正格言&#xff0c;胸中方有主宰&#xff1b;闲看他人行事&#xff0c;眼前即是规箴 围炉夜话 《围炉夜话&#xff08;读客三个圈经典文库&#xff09;》作者王永彬。读《围炉夜话》&#xff0c;可以掌握君子安身立业的大智慧&#xff01…

基于大模型的复杂决策支持系统设计与实施策略

基于大模型的复杂决策支持系统设计与实施策略 1. 背景介绍 随着大数据、云计算和人工智能技术的飞速发展&#xff0c;决策支持系统&#xff08;Decision Support System, DSS&#xff09;在各个领域得到了广泛应用。传统的决策支持系统主要依赖于统计分析和专家系统&#xff…

【Canvas与艺术】暗蓝网格汽车速度仪表盘

【关键点】 采用线性渐变色&#xff0c;使上深下浅的圆有凹下效果&#xff0c;使上浅下深的圆有凸起效果&#xff0c;两者结合就有立体圆钮的感觉。 【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type&quo…

Java全栈课程之Linux———目录相关命令

一、绝对路径和相对路径 我们知道Linux的目录结构为树状结构&#xff0c;最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中&#xff0c;通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径&#xff1a; 路径的写…

2015年认证杯SPSSPRO杯数学建模C题(第二阶段)荒漠区动植物关系的研究全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 C题 荒漠区动植物关系的研究 原题再现&#xff1a; 环境与发展是当今世界所普遍关注的重大问题, 随着全球与区域经济的迅猛发展, 人类也正以前所未有的规模和强度影响着环境、改变着环境, 使全球的生命支持系统受到了严重创伤, 出现了全球变暖…

R语言基础入门

1.保存或加载工作空间 改变工作目录——进行文件读写&#xff0c;默认去指定文件进行操作。&#xff08;使用R时&#xff0c;最好先设定工作目录&#xff08;setwd(),getwd()&#xff09;&#xff09; setwd(“工作文件路径”)&#xff1a;建立工作目录 getwd&#xff08;&…