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

BackgroundSubtractor类是专门用于视频分析的,即BackgroundSubtractor类会对每帧的环境进行“学习”。BackgroundSubtractor类常用来对不同帧进行比较,并存储以前的帧,可按时间推移方法来提高运动分析的结果。

import cv2camera = cv2.VideoCapture(0) # 参数0表示第一个摄像头
mog = cv2.createBackgroundSubtractorMOG2()while (1):grabbed, frame_lwpCV = camera.read()fgmask = mog.apply(frame_lwpCV)cv2.imshow('frame', fgmask)key = cv2.waitKey(1) & 0xFF# 按'q'健退出循环if key == ord('q'):break
camera.release()
cv2.destroyAllWindows()


BackgroundSubtractor类的另一个基本特征是它可以计算阴影。这对于精确读取视频帧绝对是至关重要的;通过检测阴影,可以排除检测图像的阴影区域(采用阈值方式),从而能关注实际特征。

import cv2
import numpy as npcamera = cv2.VideoCapture(0) # 参数0表示第一个摄像头
bs = cv2.createBackgroundSubtractorKNN(detectShadows=True)
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
while True:grabbed, frame_lwpCV = camera.read()fgmask = bs.apply(frame_lwpCV) # 背景分割器,该函数计算了前景掩码# 二值化阈值处理,前景掩码含有前景的白色值以及阴影的灰色值,在阈值化图像中,将非纯白色(244~255)的所有像素都设为0,而不是255th = cv2.threshold(fgmask.copy(), 244, 255, cv2.THRESH_BINARY)[1]# 下面就跟基本运动检测中方法相同,识别目标,检测轮廓,在原始帧上绘制检测结果dilated = cv2.dilate(th, es, iterations=2) # 形态学膨胀image, contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 该函数计算一幅图像中目标的轮廓for c in contours:if cv2.contourArea(c) > 1600:(x, y, w, h) = cv2.boundingRect(c)cv2.rectangle(frame_lwpCV, (x, y), (x + w, y + h), (255, 255, 0), 2)cv2.imshow('mog', fgmask)cv2.imshow('thresh', th)cv2.imshow('detection', frame_lwpCV)key = cv2.waitKey(1) & 0xFF# 按'q'健退出循环if key == ord('q'):break
# When everything done, release the capture
camera.release()
cv2.destroyAllWindows()


图片从左到右依次为:检测出的运动目标、背景分割、背景分割后阈值化

(OpenCV+Python)--目标跟踪,背景分割器:KNN、MOG2和GMG相关推荐

  1. 机器视觉 OpenCV—python目标跟踪(光流)

    文章目录 一.运动检测 1.1 检测思路 1.2 代码 二.运动方向预测 2.1 关键点(角点)追踪 goodFeaturesToTrack() 2.2 光流法 一.运动检测 1.1 检测思路 目标跟 ...

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

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

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

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

  4. Python图像处理,cv2模块,OpenCV实现目标跟踪

    前言 利用Python实现OpenCV目标跟踪.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块: 以及一些Python自带的模块. 环境搭建 安装 ...

  5. Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)

    本博客翻译搬运自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python,用于初入目标跟踪的新手学习,转贴请注明! 使用O ...

  6. 13 KNN背景分割器

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

  7. opencv动态目标跟踪学习总结

    用opencv实现对视频中动态目标的追踪 第一步,是要建立一个编程环境,然后加载opencv的库路径等等.具体步骤在 http://www.opencv.org.cn/ 的"安装" ...

  8. 漫谈视频目标跟踪与分割

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文整理记录了旷视研究院Detection组针对视频目标跟踪与分割问题的探讨和收获,并从喜闻乐见的图像 ...

  9. 笔记 基于OpenCV的目标跟踪软件与系统实现

    1.目标检测理论包括光流法.帧间差分法和背景差分法, 目标分割理论包括全局阈值法和局部阈值法, 目标跟踪的均值漂移法和卡尔曼滤波法. 2.基于opencv的目标跟踪软件设计于实现 在vc环境下,按照单 ...

最新文章

  1. 软件访问转向本地_我是如何从完整的初学者转向软件开发人员的,以及如何做到的...
  2. Agan的IT博客开张啦
  3. 大数据发展新契机:中国人工智能产业创新联盟在京成立
  4. Python编程基础:第五十三节 匿名函数Lambda Function
  5. xss攻击汇总--转
  6. event.keycode值大全
  7. Microsoft SQL Server学习(二)
  8. 数学无用论??我们欠孩子真正的数学阅读
  9. 对一个“世纪数学难题”的重新思考
  10. Mybatis中Mapper动态代理方式
  11. Linux系统编程:习题,父子进程通过信号通信,实现交替数数
  12. Linux网络协议栈:NAPI机制与处理流程分析(图解)
  13. android 表情删除,微信8.0版本为什么删除30多个表情?旧表情删除原因说明[多图]...
  14. 以太坊2.0合约余额新增3872 ETH
  15. 基于python下django框架 实现闲置物品二手跳蚤市场交易系统详细设计
  16. 【算法】牛和牛栏如何匹配到最大值
  17. [Error] ‘for‘ loop initial declarations are only allowed in C99 or C11 mode 解决方法
  18. 腾讯员工的1则匿名帖子,让我细思极恐:不要低估人性的恶
  19. 怎样用XMind 8将思维导图导出为Excel文件
  20. ​Vue 3 这个坑我踩了,你们一定要小心

热门文章

  1. 梦幻默认服务器文件夹修改器,【梦幻仙境V3.96服务端】梦幻最新完美开心版带存档与修改器时代梦幻最新5.2版本...
  2. micropython按键检测_TM1650按键扫描
  3. python中1 is True 的结果为False,is判断与==判断的区别
  4. 知无不言 容芳志:Objective-C地位下滑是必然
  5. CentOS7 使用二进制部署 Kubernetes 1.15-1.17集群(均通用,已经尝试,细心)
  6. Gstreamer说明
  7. plsql 连接 虚拟机Linux下的Oracle数据库 失败
  8. 用 Python 监控 NASA TV 直播画面
  9. 3·15特辑:“伪智能”厂商能有什么坏心思,无非是想骗钱罢了
  10. oracle字段长度不足位数补零