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中Flask框架简单入门实例
Mar 21 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
对python3新增的byte类型详解
Dec 04 Python
python网络应用开发知识点浅析
May 28 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
python实现FTP循环上传文件
Mar 20 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
May 15 Python
python Gabor滤波器讲解
Oct 26 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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 allow_url_include的应用和解释
2010/04/22 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
python实现图片批量剪切示例
2014/03/25 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
幸福家庭事迹材料
2014/02/03 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
Spring中的@Transactional的工作原理
2022/06/05 Java/Android