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编程修改MP3文件名称的方法
Apr 19 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
python pandas库的安装和创建
Jan 10 Python
Python学习笔记之自定义函数用法详解
Jun 08 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
python 自动刷新网页的两种方法
Apr 20 Python
Django实现聊天机器人
May 31 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
python基础教程之匿名函数lambda
2017/01/17 Python
python正则表达式re之compile函数解析
2017/10/25 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
青年文明号复核材料
2014/02/11 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
法律专业自荐信
2014/06/03 职场文书
专项法律服务方案
2014/06/11 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
医院消毒隔离制度
2015/08/05 职场文书