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自然语言编码转换模块codecs介绍
Apr 08 Python
Python中的filter()函数的用法
Apr 27 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
Python实现修改IE注册表功能示例
May 10 Python
python使用webdriver爬取微信公众号
Aug 31 Python
浅述python中深浅拷贝原理
Sep 18 Python
python中的协程深入理解
Jun 10 Python
为什么说Python可以实现所有的算法
Oct 04 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
python如何实现复制目录到指定目录
Feb 13 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 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
mysql 全文搜索 技巧
2007/04/27 PHP
PHP中ADODB类详解
2008/03/25 PHP
PHP获取url的函数代码
2011/08/02 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
解析php中memcache的应用
2013/06/18 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
php中错误处理操作实例分析
2019/08/23 PHP
document.documentElement的一些使用技巧
2013/04/18 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
详解Python中的多线程编程
2015/04/09 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
机电一体化自荐信
2013/12/10 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
销售员自我评价
2015/03/11 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
openstack云计算keystone组件工作介绍
2022/04/20 Servers