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 相关文章推荐
Python天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
Python注释详解
Jun 01 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
python实现人机猜拳小游戏
Feb 03 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
使用python如何删除同一文件夹下相似的图片
May 07 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
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python深度优先算法生成迷宫
2018/01/22 Python
python2.7安装图文教程
2018/03/13 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
求职自荐信怎么写
2014/03/06 职场文书
仓库文员岗位职责
2014/04/06 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
会计毕业生自荐书
2014/06/12 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP