相比与基本背景差分器,MOG能够不断更新背景图像,从而能够更好地应对摄像头的运动以及光线变化带来的影响。

简而言之,原来的算法太过死板,从头到尾都是用的同一个背景图像用于对比,而MOG会随时间变化,更新用于对比的背景(见下面两张图),实际效果更好。

# MOG背景差分器
# MOG背景差分器中取消了高斯模糊的操作
import cv2# 定义运算的核算子
erode_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
dilate_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))# 打开摄像头
cap = cv2.VideoCapture(0)
success, frame = cap.read()# 丢弃9帧,让相机有足够时间调整
for i in range(9):success, frame = cap.read()if not success:exit(1)# detectShadows设置为true,就会标记出阴影区域,避免实际生活中瓷砖的倒影阴影的影响
# 前景部分会用白色255标记,阴影部分用灰色127标记,背景用黑色标记
mog_subtract = cv2.createBackgroundSubtractorMOG2(detectShadows=True)success, frame = cap.read()
frame = cv2.flip(frame, 1)
while success:# 使用mog进行图像背景分割处理fg_mask = mog_subtract.apply(frame)_, thresh = cv2.threshold(fg_mask, 244, 255, cv2.THRESH_BINARY)  # 对掩膜用接近白色的阈值,提取出前景# 形态学运算进行平滑处理,便于后续边框的绘制cv2.erode(thresh, erode_kernel, thresh, iterations=2)cv2.dilate(thresh, dilate_kernel, thresh, iterations=2)# 先寻找轮廓contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for c in contours:# 排除轮廓太小的物体if cv2.contourArea(c) > 8000:x, y, w, h = cv2.boundingRect(c)cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)cv2.imshow("fg_mask", fg_mask)cv2.imshow("thresh", thresh)cv2.imshow("detection", frame)# 按下esc键退出if cv2.waitKey(1) == 27:break# 循环success, frame = cap.read()frame = cv2.flip(frame, 1)# 关闭摄像头和所有窗口
cap.release()
cv2.destroyAllWindows()

利用MOG背景分割器实现物体追踪相关推荐

  1. Python+OpenCV利用KNN背景分割器进行静态场景行人检测与轨迹跟踪

    前言 视频图像中的目标检测与跟踪,是计算机视觉的基础课题,同时具有广泛的应用价值.视觉目标(单目标)跟踪任务就是在给定某视频序列初始帧的目标大小与位置的情况下,预测后续帧中该目标的大小与位置.本篇文章 ...

  2. OpenCV视频目标跟踪及背景分割器

    目标跟踪 本文主要介绍cv2中的视频分析Camshift和Meanshift. 目标: 学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体 Meanshift算法: mean ...

  3. 13 KNN背景分割器

    传统的前景背景分割方法有GrabCut,分水岭算法,当然也包括一些阈值分割的算法.但是这些算法在应用中往往显得鲁棒性较弱,达不到一个好的分割效果. 现代的背景分割算法融入了机器学习的一些方法来提高分类 ...

  4. (OpenCV+Python)--目标跟踪,背景分割器:KNN、MOG2和GMG

    OpenCV提供了一个称为BackgroundSubtractor的类,在分割前景和背景时很方便. 在OpenCV3中有三种背景分割器:K-Nearest(KNN).Mixture of Gaussi ...

  5. python+OpenCV笔记(三十七):检测运动物体——使用MOG/KNN背景差分器

    目录 一.基本背景差分器 二.MOG背景差分器 流程 代码编写 三.KNN背景差分器 目前,许多运动检测技术都是基于简单的背景差分概念的,即假设摄像头(视频)的曝光和场景中的光照条件是稳定的,当摄像头 ...

  6. python opencv3 背景分割 mog2 knn

    git:https://github.com/linyi0604/Computer-Vision 使用mog2算法进行背景分割 1 # coding:utf-8 2 3 import cv2 4 5 ...

  7. 关于pdf分割器的下载方式和使用

    出于美观和醒目的需要,有时需要将下载出来的较大的文件分割成多个文本.如果利用迅捷PDF分割器来拆分PDF文件,则可以达到事半功倍的效果 .pdf分割软件 http://www.orsoon.com/s ...

  8. OpenCV学习之利用背景建模检测运动物体

    利用背景建模检测运动物体 #include "cv.h" #include "highgui.h" #include <stdio.h> int m ...

  9. 据我所知,这是第一个完整实现运动分割、动态目标追踪等的「开源」动态SLAM系统!...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 今天给大家分享一篇最新文章,VDO-SLAM :一种动态目标感知的视觉SLAM系统,原文名称 VDO- ...

最新文章

  1. [java手把手教程][第二季]java后端博客系统文章系统——No10
  2. 【HAOI2014】走出金字塔
  3. RTD-D项目总结(MATLAB)
  4. php菜单管理样式模板,php – SilverStripe Fluent菜单模板
  5. 剑指offer.删除链表中重复的节点
  6. 使用Speech SDK 5.1文字转音频
  7. 【图像隐写】基于matlab GUI LSB图像隐写【含Matlab源码 713期】
  8. 基于最小二乘法的人口增长模型拟合
  9. font-family:中文字体的英文名称
  10. 来啦!iphone ios免越狱,个性化修改微信提示音!
  11. Lync server 2013 部署开发常用工具下载
  12. eTerm放大/PID放大软件众多,如何选择
  13. 精简的webservice例子
  14. mysql 8.0开启远程访问
  15. vue项目购物车组件、清空购物车
  16. 字符串Hash函数对比
  17. 字符编码 unicode 及其在javascript 中的使用
  18. 小米手机与计算机如何连接网络连接,小米手机怎么通过电脑上网如何将手机与电脑相连...
  19. iOS永久签名不掉签工具,轻松签超详使用教程
  20. 二叉树的非递归遍历详解

热门文章

  1. ETL工程师主要工作内容
  2. 小白入门:python sklearn之kmeans
  3. oracle 用户的登录,授权,传递授权操作
  4. 11、每日最新新闻接口,免费好用
  5. 设置单选框只能选择一个
  6. CoolEdit导出片段文件
  7. vue的html自动刷新,vue项目刷新当前页面的方法
  8. 最全Visual Studio版本号对应表VisualStudioVersion
  9. 【软件测试】python完成接口测试示例
  10. 书籍 -- 《高性能MySQL》持续更新中(四)