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程序设计入门(1)基本语法简介
Jun 13 Python
python实现定时播放mp3
Mar 29 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
python解析xml简单示例
Jun 21 Python
pandas分区间,算频率的实例
Jul 04 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
python 穷举指定长度的密码例子
Apr 02 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
浅析Python打包时包含静态文件处理方法
Jan 15 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 金额数字转换成英文
2010/05/06 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
基于empty函数的输出详解
2013/06/17 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php判断linux下程序问题实例
2015/07/09 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
连接Python程序与MySQL的教程
2015/04/29 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
python解析含有重复key的json方法
2019/01/22 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
如何写自我鉴定
2014/03/19 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
企业承诺书格式范文
2015/04/28 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Pytorch可视化的几种实现方法
2021/06/10 Python