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编写生成树状结构的文件目录的脚本的教程
May 04 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
Python实现截屏的函数
Jul 26 Python
Python进行数据提取的方法总结
Aug 22 Python
python八皇后问题的解决方法
Sep 27 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
python读取并写入mat文件的方法
Jul 12 Python
Django基础知识 URL路由系统详解
Jul 18 Python
Python通过socketserver处理多个链接
Mar 18 Python
python实现批处理文件
Jul 28 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
超级详细实用的pycharm常用快捷键
May 12 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
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
jquery 使用简明教程
2014/03/05 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
Python打包可执行文件的方法详解
2016/09/19 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python关于调用函数外的变量实例
2019/12/26 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
J2EE面试题大全
2016/08/06 面试题
二手书店创业计划书
2014/01/16 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
干部个人考察材料
2014/12/24 职场文书
写给医院的感谢信
2015/01/22 职场文书
婚宴致辞
2015/07/28 职场文书
《雷雨》教学反思
2016/02/20 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python