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获取当前运行函数名称的方法实例代码
Apr 06 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
Python使用字典的嵌套功能详解
Feb 27 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
Keras实现将两个模型连接到一起
May 23 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
Django通过设置CORS解决跨域问题
Nov 26 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
PHP数据库操作面向对象的优点
2006/10/09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php创建图像具体步骤
2017/03/13 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
python logging类库使用例子
2014/11/22 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python 循环数据赋值实例
2019/12/02 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
Python虚拟环境venv用法详解
2020/05/25 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
《王二小》教学反思
2014/02/27 职场文书
新学期教师寄语
2014/04/02 职场文书
中介业务员岗位职责
2014/04/09 职场文书
公司合并协议书范本
2014/09/30 职场文书
消费者理赔投诉书
2015/07/02 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书