目标检测(一):背景差分法

2023-10-27

 

       目标检测是将运动的物体从背景中检测出来,人们希望设计能适用于各种监控环境,不受光照、天气等外界因素影响的目标检测算法。但这种算法难免复杂度大,现有一些算法大多是针对某一类问题提出的,主要包括背景减法、相邻帧差法和光流法等

1.1背景减法

       背景减法(backgroundsubtraction)是目前运动目标检测的主流方法,其基本思想是将当前每一帧图像与事先存储或实时获取的背景图像相减,计算出与背景偏离超过一定阀值的区域作为运动区域。该算法实现简单,相减结果直接给出目标的位置、大小、形状等信息,能够提供关于运动目标区域的完整描述,特别是对于摄像机静止的情况,背景减法是实现运动目标实时检测和提取的首选方法。
       背景减法实现的关键是背景模型的获取和更新。背景获取算法通常要求在场景中存在运动目标的情况下获取背景图像,更新过程使背景能够适应场景的各种变化和干扰,如外界光线的改变,背景中对象的扰动和固定对象的移动,阴影的影响等。一种典型的背景建模方法是用混合高斯模型描述背景图像像素值的分布,目标检测过程中判断图像的当前像素值是否符合该分布,若是被判为前景点,否则为背景点。同时根据新获取的图像,对背景图像参数进行自适应更新。该方法能够可靠处理光照变化、背景混乱运动的干扰以及长时间的场景变化等。在此基础上,对背景、静止目标和运动目标三者采取不同的更新策略,以减弱背景更新过程中运动目标对背景的影响。

1.2 BS算法

   OpenCV提供的BS算法:

  • 图像分割(GMM - 高斯混合模型)
  • 机器学习(KNN - K个最近邻)

   以下代码将通过GMM和KNN两种方法,实现了实时检测运动目标效果的对比。

代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	VideoCapture cap(0);

	if (!cap.isOpened())
	{
		printf("\nCan not open camera \n");
		return -1;
	}
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));

	// intialization BS
	Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
   //Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN();

	Mat tmp_frame;
	Mat bsmaskMOG2, bsmaskKNN;

	for (;;)
	{
		cap >> tmp_frame;
		if (tmp_frame.empty())
			break;
		// MOG BS
		pMOG2->apply(tmp_frame, bsmaskMOG2);
		morphologyEx(bsmaskMOG2, bsmaskMOG2, MORPH_OPEN, kernel, Point(-1, -1));
		imshow("MOG2", bsmaskMOG2);

		// KNN BS mask
		//pKNN->apply(tmp_frame, bsmaskKNN);
		//imshow("KNN Model", bsmaskKNN);

		imshow("video", tmp_frame);
		
		char keycode = (char)waitKey(30);//按ESC推出
		if (keycode == 27)
			break;
	}
	cap.release();
	return 0;
}

  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测(一):背景差分法 的相关文章

随机推荐

  • 【无线传感器】使用 MATLAB和 XBee连续监控温度传感器无线网络研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据 1 概述 在本文中 MATLAB 用于通过与使用
  • MSSQL内置数据库角色及访问权限设置

    MSSQL数据库内置数据库角色 在MSSQL数据库中 有一些内置的数据库角色 这些角色具有特定的权限和功能 以下是常见的内置角色 sysadmin sysadmin是服务器级别的角色 拥有最高权限 sysadmin可以执行服务器上的任何操作
  • 搭建IFS虚拟机

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 开发任务 羿鹏项目ats与iscs通信协议中新增了ats向iscs发送屏蔽门状态信
  • 五分钟学Java:为什么会发生ArrayIndexOutOfBoundsException?

    在逛 Stack Overflow 的时候 发现了一些访问量像昆仑山一样高的问题 比如说这个 为什么会发生 ArrayIndexOutOfBoundsException 这样看似简单到不值得一问的问题 访问量足足有 69万 这不得了啊 说明
  • 多对一查询方法

    1 sql文件 CREATE TABLE teacher id INT 10 NOT NULL name VARCHAR 30 DEFAULT NULL PRIMARY KEY id ENGINE INNODB DEFAULT CHARSE
  • git push 失败与解决方法汇总

    1 http链接失败 现象 Permission denied publickey fatal the remote hang up unexpectly 原因 http链接失败 解决方法 1 生成ssh密钥 2 然后将公钥拷贝到gitup
  • VNDK extensions

    Android P要求开VNDK 如果HAL需要链接android原生库 原生库的Android bp必须包含下面内容 如果没有对原生库做任何修改 编译不会出现问题 如果对原生库做了修改 这个时候编译会出错 会提示不允许链接该库 这个时候就
  • sklearn.model_selection.train_test_split

    数据集划分 sklearn model selection train test split arrays options 主要参数说明 arrays 可以是列表 numpy数组 scipy稀疏矩阵或pandas的数据框 test size
  • KeyError: ‘Unable to open object (free block size is zero?)‘解决方法

    在复刻Mask R CNN训练自己的数据集时遇到这个问题 查了很多资料没有找到解决方法 历尽千辛万苦终于找到蛛丝马迹 分享一下帮助遇到相同问题的人少走些弯路 问题原因 一开始为了学习如何复刻下载了别人的代码进行学习 自己复刻时直接使用了旧的
  • 从零搭建树莓派远程监控小车,udp视频传输,qt上位机

    目录 前言 一 材料准备 二 连线方式 三 软件编程 软件编程主要有一下几个方面 1 树莓派视频传输 2 esp8266代码 3 上位机编程 四 总结 前言 最近刚准备完期末机器人驱动的课设 本来是做远程监控无人机的 但是第一次玩无刷电机
  • 吹捧不是区块链的全部,冷静才是正道!

    众所周知 尽管区块链能给我们带来完全不同的想象空间 但是依然掩盖不了它是一个新生的底层技术的现实 如果在一个技术的新生阶段就去吹捧它如何之好 显然是不对的 因为对于新生技术来讲 它的最初阶段最应该具备的 姿势 就是不断丰富和完善自己 为自己
  • 星空时钟c++

    include
  • [Python图像处理] 基于离散余弦变换的安全扩频数字水印

    基于离散余弦变换的安全扩频数字水印 数字水印 基于离散余弦变换的安全扩频数字水印 实现安全扩频数字水印 相关链接 数字水印 数字水印是可见的或不可见的标识码 这种标识码被永久嵌入图像中 并且即使在解码过后后仍存在于图像中 为了保证有效性 水
  • ubuntu20.04下安装pcl

    pcl点云数据库 用来进行3D信息的获取与处理 和opencv相比较 opencv是用来处理二维信息 他是学术界与工业界针对点云最全的库 且网络上相关的资料很多 以下是pcl的安装步骤以及遇到的问题 提前说明 本人用的是ubuntu20 0
  • 一个干净优雅的 Element UI Admin 模板

    Element UI Admin 一个干净优雅的Element UI Admin模板 一个大型单页应用离不开合理的项目结构和一些简单的封装github com xusenlin el Start 克隆或者下载这个仓库 进入项目目录安装依赖
  • 记录好项目D11

    记录好项目 你好呀 这里是我专门记录一下从某些地方收集起来的项目 对项目修改 进行添砖加瓦 变成自己的闪亮项目 修修补补也可以成为毕设哦 本次的项目是个宠物交易 领养系统 一 系统介绍 包括管理员 普通用户两种角色 外加游客 未登录情况 权
  • RT-Thread Studio学习 使用at_device软件包通过ESP8266连接到网络

    本文参考自 https blog csdn net FILLMOREad article details 106233464 ESP8266模块电路图 添加软件包 打开 RT Thread Settings 点击 libc 将其开启 点击添
  • Android Studio中将一个项目转变成library(model)引入到另一个项目中使用

    大家平时在做项目时 会经常应用library作为第三方依赖 那么如果公司中有多个app 其中有部分业务功能逻辑是相似并且可以复用的时候 我们货怎么办呢 简单粗暴的办法就是直接复制过来 但是这样做岂不是复用率不高 以后这部分代码要修改岂不是每
  • linux的几个进程的作用

    author skate time 2011 08 10 linux的几个进程的作用 1 kswapd0 Linux uses kswapd for virtual memory management such that pages tha
  • 目标检测(一):背景差分法

    目标检测是将运动的物体从背景中检测出来 人们希望设计能适用于各种监控环境 不受光照 天气等外界因素影响的目标检测算法 但这种算法难免复杂度大 现有一些算法大多是针对某一类问题提出的 主要包括背景减法 相邻帧差法和光流法等1 1背景减法 背景