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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
Python实现在线程里运行scrapy的方法
Apr 07 Python
Python内置函数OCT详解
Nov 09 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
浅析使用Python搭建http服务器
Oct 27 Python
如何使用python进行pdf文件分割
Nov 11 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
使用TensorBoard进行超参数优化的实现
Jul 06 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
python数据处理之Pandas类型转换
Apr 28 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
js实现验证码功能
2020/07/24 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python如何省略括号方法详解
2020/03/21 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
试述DBMS的主要功能
2016/11/13 面试题
遇到的Mysql的面试题
2014/06/29 面试题
文明学生事迹材料
2014/01/29 职场文书
统计岗位职责
2014/02/21 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python