python和opencv构建运动检测器的实现


Posted in Python onMarch 03, 2021

照着一个示例跑,目标本是捕获进入摄像头的第一帧然后会一直追踪这一个物体,如果出现的话会框出来,但是不知道什么原因,第一个框出来之后移动到别的地方还是会框别的东西,然后摄像头打开几秒就自动停止了还报错

python和opencv构建运动检测器的实现

python和opencv构建运动检测器的实现

import pandas

firstframe = None
status = [None,None]
df = pandas.DataFrame(columns=["start","end"])
cap = cv2.VideoCapture(1)
while True:
  check,colorframe = cap.read()
  status = 0
  gray = cv2.cvtColor(colorframe,cv2.COLOR_BGR2GRAY)
  gray = cv2.GaussianBlur(gray,(21,21),0) #高斯模糊去除噪声
  if firstframe is None:
    firstframe = gray
    continue #捕获第一个灰度帧 得到第一帧后不进行后续处理
  delta_frame = cv2.absdiff(firstframe,gray)
  # ,我们需要找出第一帧和当前帧之间的区别。因此,我们使用absdiff函数并将得到的结果称为delta帧。对于我们的用例来说,仅仅找到一个差异是不够的,所以我们需要定义一个像素阈值,它可以被视为真实的对象。我们可以选择30像素作为标准阈值,并将标准阈值的颜色定义为白色(颜色代码:255). 二元阈值函数THRESH_BINARY返回一个元组值,其中只有第二项([0]是第一项,[1]是第二项)包含生成的阈值帧。二元阈值函数用于处理含有2个离散值的非连续函数:如0或1。如果摄影机前面没有对象,我们将当前帧的状态视为0;如果摄影机前面存在对象,则将当前帧的状态视为1。 

  thresh_frame = cv2.threshold(delta_frame,30,255,cv2.THRESH_BINARY)[1]
  thresh_frame = cv2.dilate(thresh_frame,None,iterations=3)
  # 在膨胀函数Dilate中,我们可以通过设置迭代次数来设置平滑度。迭代次数越多,平滑度越高,处理时间也就越长。因此,建议保持标准化设置为3。膨胀函数中的“None”参数表示我们的应用中不需要元素结构。 

#声明元组的语法 (cnts,_)
  (cnts,_) = cv2.findContours(thresh_frame.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
  for contours in cnts :
    if cv2.contourArea(contours) < 10000:
      continue
    if cv2.contourArea(contours) < 20000:
     status = 1
     (x,y,w,h) = cv2.boundingRect(contours)
     cv2.rectangle(colorframe,(x,y),(x+w,y+h),(0,0,255),3)
     cv2.imshow("cc",colorframe)
  key = cv2.waitKey(1)
  if key == ord('q'):
    break

显然这里有什么问题。
留待解决:高斯平滑参数的获取

到此这篇关于python和opencv构建运动检测器的实现的文章就介绍到这了,更多相关python opencv构建运动检测器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
编程语言Python的发展史
Sep 26 Python
最大K个数问题的Python版解法总结
Jun 16 Python
Pycharm设置界面全黑的方法
May 23 Python
对python sklearn one-hot编码详解
Jul 10 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
python中的Elasticsearch操作汇总
Oct 30 Python
python实现实时视频流播放代码实例
Jan 11 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
Python中if有多个条件处理方法
Feb 26 Python
浅谈python数据类型及其操作
May 25 Python
浅谈Python数学建模之线性规划
Jun 23 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 #Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 #Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 #Python
对Pytorch 中的contiguous理解说明
Mar 03 #Python
Flask中jinja2的继承实现方法及实例
Mar 03 #Python
基于PyTorch中view的用法说明
Mar 03 #Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 #Python
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
javascript Select标记中options操作方法集合
2008/10/22 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
高中课程设置方案
2014/05/28 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
公务员检讨书
2014/11/01 职场文书
2014年科技工作总结
2014/11/26 职场文书
销售口号霸气押韵
2015/12/24 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL