Python+OpenCV目标跟踪实现基本的运动检测


Posted in Python onJuly 10, 2018

目标跟踪是对摄像头视频中的移动目标进行定位的过程,有着非常广泛的应用。实时目标跟踪是许多计算机视觉应用的重要任务,如监控、基于感知的用户界面、增强现实、基于对象的视频压缩以及辅助驾驶等。

有很多实现视频目标跟踪的方法,当跟踪所有移动目标时,帧之间的差异会变的有用;当跟踪视频中移动的手时,基于皮肤颜色的均值漂移方法是最好的解决方案;当知道跟踪对象的一方面时,模板匹配是不错的技术。

本文代码是做一个基本的运动检测

考虑的是“背景帧”与其它帧之间的差异

这种方法检测结果还是挺不错的,但是需要提前设置背景帧,如果是在室外,光线的变化就会引起误检测,还是很有局限性的。

Python+OpenCV目标跟踪实现基本的运动检测

import cv2
import numpy as np

camera = cv2.VideoCapture(0) # 参数0表示第一个摄像头
# 判断视频是否打开
if (camera.isOpened()):
  print('Open')
else:
  print('摄像头未打开')

# 测试用,查看视频size
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
    int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:'+repr(size))

es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
kernel = np.ones((5, 5), np.uint8)
background = None

while True:
  # 读取视频流
  grabbed, frame_lwpCV = camera.read()
  # 对帧进行预处理,先转灰度图,再进行高斯滤波。
  # 用高斯滤波进行模糊处理,进行处理的原因:每个输入的视频都会因自然震动、光照变化或者摄像头本身等原因而产生噪声。对噪声进行平滑是为了避免在运动和跟踪时将其检测出来。
  gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY)
  gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)

  # 将第一帧设置为整个输入的背景
  if background is None:
    background = gray_lwpCV
    continue
  # 对于每个从背景之后读取的帧都会计算其与北京之间的差异,并得到一个差分图(different map)。
  # 还需要应用阈值来得到一幅黑白图像,并通过下面代码来膨胀(dilate)图像,从而对孔(hole)和缺陷(imperfection)进行归一化处理
  diff = cv2.absdiff(background, gray_lwpCV)
  diff = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1] # 二值化阈值处理
  diff = cv2.dilate(diff, es, iterations=2) # 形态学膨胀

  # 显示矩形框
  image, contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 该函数计算一幅图像中目标的轮廓
  for c in contours:
    if cv2.contourArea(c) < 1500: # 对于矩形区域,只显示大于给定阈值的轮廓,所以一些微小的变化不会显示。对于光照不变和噪声低的摄像头可不设定轮廓最小尺寸的阈值
      continue
    (x, y, w, h) = cv2.boundingRect(c) # 该函数计算矩形的边界框
    cv2.rectangle(frame_lwpCV, (x, y), (x+w, y+h), (0, 255, 0), 2)

  cv2.imshow('contours', frame_lwpCV)
  cv2.imshow('dis', diff)

  key = cv2.waitKey(1) & 0xFF
  # 按'q'健退出循环
  if key == ord('q'):
    break
# When everything done, release the capture
camera.release()
cv2.destroyAllWindows()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
python开发简易版在线音乐播放器
Mar 03 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python 定时器,轮询定时器的实例
Feb 20 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python3字符串操作总结
Jul 24 Python
python编写简单端口扫描器
Sep 04 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
python快速排序的实现及运行时间比较
Nov 22 Python
如何在 Django 模板中输出 &quot;{{&quot;
Jan 24 Python
python datetime处理时间小结
Apr 16 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 #Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 #Python
python 常用的基础函数
Jul 10 #Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 #Python
python opencv实现运动检测
Jul 10 #Python
python中单下划线_的常见用法总结
Jul 10 #Python
浅谈dataframe中更改列属性的方法
Jul 10 #Python
You might like
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
DEFER怎么用?
2006/07/01 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
JavaScript简介
2015/02/15 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
vuex的使用步骤
2021/01/06 Vue.js
Python实现查找系统盘中需要找的字符
2015/07/14 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
python批量下载抖音视频
2019/06/17 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
一套中级Java程序员笔试题
2015/01/14 面试题
中学生校园广播稿
2014/01/16 职场文书
理财学专业自荐书
2014/06/28 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
师德标兵事迹材料
2014/12/19 职场文书
新教师个人总结
2015/02/06 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
浅析Python实现DFA算法
2021/06/26 Python
MySQL的存储过程和相关函数
2022/04/26 MySQL