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 09 Python
django 自定义用户user模型的三种方法
Nov 18 Python
Python中实现三目运算的方法
Jun 21 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
Python多分支if语句的使用
Sep 03 Python
Python日志器使用方法及原理解析
Sep 27 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
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
jquery实现拖动效果
2016/08/10 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
python开启debug模式的方法
2019/06/27 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
python 实现批量图片识别并翻译
2020/11/02 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
Python jiaba库的使用详解
2021/11/23 Python
MySQL常见优化方案汇总
2022/01/18 MySQL
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技