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

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 BSPtr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();//Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN();Mat tmp_frame;Mat bsmaskMOG2, bsmaskKNN;for (;;){cap >> tmp_frame;if (tmp_frame.empty())break;// MOG BSpMOG2->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;
}

目标检测(一):背景差分法相关推荐

  1. 弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制

    基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制 1. 前言 2. 顶帽变换(Top_hat)算法 3. Matlab仿真 4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵&q ...

  2. 弱小目标检测跟踪算法研究(7) 基于简单平滑滤波算法的红外弱小目标检测之背景抑制

    基于简单平滑滤波算法的红外弱小目标检测之背景抑制 1. 前言 2. 平滑滤波算法 3. Matlab仿真 4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵"弱"和&quo ...

  3. 弱小目标检测跟踪算法研究(4) 基于双边滤波(BF)的红外弱小目标检测之背景抑制Opencv

    基于双边滤波(BF)的红外弱小目标检测之背景抑制Opencv 1. 前言 2. 双边滤波算法 3. Opencv实例 4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵"弱" ...

  4. 弱小目标检测跟踪算法研究(4) 基于双边滤波(BF)的红外弱小目标检测之背景抑制

    基于双边滤波(BF)的红外弱小目标检测之背景抑制 1. 前言 2. 双边滤波算法 3. Matlab仿真 4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵"弱"和&quo ...

  5. 弱小目标检测跟踪算法研究(5) 基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制Opencv

    基于顶帽变换(Top_hat)算法的红外弱小目标检测之背景抑制Opencv 1. 前言 2. 顶帽变换(Top_hat)算法 3. Opencv实例 4. 小结 1. 前言 红外图像中的弱小目标,目标 ...

  6. 弱小目标检测跟踪算法研究(3) 基于局部对比度(LCM)的红外弱小目标检测之背景抑制

    基于局部对比度(LCM)的红外弱小目标检测之背景抑制 1. 前言 2. 局部对比度(LCM)算法 3. Matlab仿真 4. 小结 1. 前言 红外图像中的弱小目标,目标属性包涵"弱&qu ...

  7. 基于运动信息的物体检测(背景差分法、帧间差分法和光流法)。

    1.背景差分法: 它的基本思想是将输入图像与背景模型进行比较,通过判定灰度等特征的变化,或用直方图等统计信息的变化来分割运动目标. 首先建立好背景模型,存储背景图像.当当前帧与背景图像相减大于一定的阈 ...

  8. CV | 运动目标检测 之 背景差分法

    简介 最近开始上手运动目标检测和跟踪,对于传统的目标检测算法比如帧差法.背景差分法.光流法之类的,从理论上学习了无数次,但是从来没有见到过程序长什么样.导致学一遍忘一遍.准备把这几类方法和程序归纳和学 ...

  9. 目标检测中背景建模方法

    FROM: http://www.cnblogs.com/ronny/archive/2012/04/12/2444053.html 最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为 ...

  10. 背景差法目标识别python_运动目标检测(4)—背景差分法

    背景减法利用图像序列中的当前帧和事先确定的背景参考模型间的差异比较,来确定运动物体位置,是一种基于统计学原理的运动目标检测的方法.这种方法的性能取决于背景建模技术,Gloyer等人使用单高斯模型的思路 ...

最新文章

  1. failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
  2. 存储系统的类型及特点
  3. 不能用了 重装系统git_重装新版gitlab时遇到gitlab-rails database初始化失败
  4. Gradle of Android Example
  5. java统计日志qps_【原创】基于日志增量,统计qps,并基于ip排序
  6. 6、(二进制类型)BIT、BINARY、VARBINARY、BLOB
  7. 205. jetcache:你需要知道的小技巧
  8. 多边形之间相交求交点的算法_路径规划算法总结
  9. php里的stdclass,PHP中的stdClass是什么?
  10. 快递扫地机器人被损坏_手机动一动,全屋扫干净:石头T4扫地机器人体验记
  11. 在 Laravel 5 中集成七牛云存储实现云存储功能
  12. 数据库修改后 前台同步更新 php,PHP实现前台页面与MySQL的数据绑定、同步更新...
  13. Jquery常用操作select篇
  14. mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
  15. facade模式 java_Java设计模式之外观模式(Facade模式)介绍
  16. Max Script|多边形的控制
  17. 鸿蒙系统吓坏谷歌,华为被谷歌正式“除名”,鸿蒙系统将正式登场绝地反击!...
  18. 深度学习入门系列,用白话文的方式让你看得懂学的快(第八章)
  19. 钉钉授权时报获取钉钉用户信息失败,失败原因:访问ip不在白名单之中的解决办法
  20. 数学基础task06 一元函数积分学的概念与计算

热门文章

  1. 转: maven进阶:一个多模块项目
  2. FPGA实现VGA显示(六)——————多字符显示及基于fpga的“打字机”实现
  3. C++ 关于I/O
  4. Ubuntu18.04安装CUDA10.1和cuDNN v7.6.5
  5. mysql 多个表union查询_mysql查询两个表,UNION和where子句
  6. 对于一些敏感的数据(例如密码),为什么使用字符数组存储比使用String更安全?
  7. shell for循环命令行_24 道 shell 脚本面试题
  8. docker镜像与容器操作流程
  9. [胡言乱语] 20170622
  10. oracle查询不等于1000,解决oracle查询时 in 大于1000的办法