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的垃圾回收机制深入分析
Jul 16 Python
Python 多线程的实例详解
Sep 07 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
python numpy 矩阵堆叠实例
Jan 17 Python
Python os模块常用方法和属性总结
Feb 20 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
python从ftp获取文件并下载到本地
Dec 05 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多种序列化与反序列化的方法
2013/06/06 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
JS 统计时间
2021/03/09 Javascript
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
解决Django no such table: django_session的问题
2020/04/07 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
期末自我鉴定
2014/02/02 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
python实现图片批量压缩
2021/04/24 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android
pandas中pd.groupby()的用法详解
2022/06/16 Python
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android