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网络编程学习笔记(10):webpy框架
Jun 09 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
pytorch 数据集图片显示方法
Jul 26 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
python新手学习可变和不可变对象
Jun 11 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
python数字类型和占位符详情
Mar 13 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
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
windows下python和pip安装教程
2018/05/25 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
毕业自荐信
2013/12/16 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
新年主持词
2014/03/27 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
初一年级组工作总结
2015/08/12 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL