python+opencv实现移动侦测(帧差法)


Posted in Python onMarch 20, 2020

本文实例为大家分享了python+opencv实现移动侦测的具体代码,供大家参考,具体内容如下

1.帧差法原理

移动侦测即是根据视频每帧或者几帧之间像素的差异,对差异值设置阈值,筛选大于阈值的像素点,做掩模图即可选出视频中存在变化的桢。帧差法较为简单的视频中物体移动侦测,帧差法分为:单帧差两桢差、和三桢差。随着帧数的增加是防止检测结果的重影。

2.算法思路

文章以截取视频为例进行单帧差法移动侦测

python+opencv实现移动侦测(帧差法)

3.python实现代码

def threh(video,save_video,thres1,area_threh):
 cam = cv2.VideoCapture(video)#打开一个视频
 input_fps = cam.get(cv2.CAP_PROP_FPS)
 ret_val, input_image = cam.read()
 index=[]
 images=[]
 images.append(input_image)
 video_length = int(cam.get(cv2.CAP_PROP_FRAME_COUNT))
 input_image=cv2.resize(input_image,(512,512))
 ending_frame = video_length
 fourcc = cv2.VideoWriter_fourcc(*'XVID')
 out = cv2.VideoWriter(save_video,fourcc, input_fps, (512, 512))
 gray_lwpCV = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
 gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)
 background=gray_lwpCV

# es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))

 i = 0 # default is 0
 outt=[]
 while(cam.isOpened()) and ret_val == True and i <2999:
  ## if i % 2==1:
  ret_val, input_image = cam.read()
  input_image=cv2.resize(input_image,(512,512))
  gray_lwpCV = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
  gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)
  diff = cv2.absdiff(background, gray_lwpCV)
  outt.append(diff)
  #跟着图像变换背景
  tem_diff=diff.flatten()
  tem_ds=pd.Series(tem_diff)
  tem_per=1-len(tem_ds[tem_ds==0])/len(tem_ds)
  if (tem_per <0.2 )| (tem_per>0.75):
   background=gray_lwpCV
  else:
   diff = cv2.threshold(diff, thres1, 255, cv2.THRESH_BINARY)[1]
   ret,thresh = cv2.threshold(diff.copy(),150,255,0)
   contours, hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
  #  contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
   for c in contours:
    if (cv2.contourArea(c) < area_threh) | (cv2.contourArea(c) >int(512*512*0.3) ) :  # 对于矩形区域,只显示大于给定阈值的轮廓(去除微小的变化等噪点)
     continue
    (x, y, w, h) = cv2.boundingRect(c) # 该函数计算矩形的边界框
    cv2.rectangle(input_image, (x, y), (x+w, y+h), (0, 255, 0), 2) 
    index.append(i)
  #  cv2.imshow('contours', input_image)
  #  cv2.imshow('dis', diff)
  out.write(input_image)
  images.append(input_image)
  i = i+1
 out.release()
 cam.release()
 return outt,index,images```
##调取函数
outt=threh('new_video.mp4','test6.mp4',25,3000)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
windows系统下Python环境搭建教程
Mar 28 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
pytorch索引查找 index_select的例子
Aug 18 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Tensorflow分批量读取数据教程
Feb 07 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 #Python
Python 自由定制表格的实现示例
Mar 20 #Python
python实现opencv+scoket网络实时图传
Mar 20 #Python
python实现同一局域网下传输图片
Mar 20 #Python
python实现udp传输图片功能
Mar 20 #Python
python实现UDP协议下的文件传输
Mar 20 #Python
python实现TCP文件传输
Mar 20 #Python
You might like
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
javascript 写类方式之七
2009/07/05 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
python3.7调试的实例方法
2020/07/21 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
大学生励志演讲稿
2014/04/25 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
毕业论文致谢范文
2015/05/14 职场文书
消防安全培训工作总结
2015/10/23 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL