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里对list中的整数求平均并排序
Sep 12 Python
Python使用metaclass实现Singleton模式的方法
May 05 Python
全面理解Python中self的用法
Jun 04 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
基于python的列表list和集合set操作
Nov 24 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
python分别打包出32位和64位应用程序
Feb 18 Python
Python列表如何更新值
May 27 Python
python区块链持久化和命令行接口实现简版
May 25 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
PHP中动态显示签名和ip原理
2007/03/28 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
Python 常用的安装Module方式汇总
2017/05/06 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python生成词云的实现代码
2020/01/14 Python
python设置环境变量的作用整理
2020/02/17 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
Ruby如何进行文件操作
2014/07/17 面试题
网络教育自我鉴定
2013/11/01 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
长城导游词
2015/01/30 职场文书
狮子林导游词
2015/02/03 职场文书
婚姻出轨保证书
2015/05/08 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python