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读写ini文件示例(python读写文件)
Mar 25 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python File readlines() 使用方法
Mar 19 Python
FFrpc python客户端lib使用解析
Aug 24 Python
利用Python校准本地时间的方法教程
Oct 31 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python基于pygame实现单机版五子棋对战
Dec 26 Python
使用python实现多维数据降维操作
Feb 24 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
介绍几个array库的新函数 php
2006/12/29 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
一些Python中的二维数组的操作方法
2015/05/02 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
python实现PID算法及测试的例子
2019/08/08 Python
django实现后台显示媒体文件
2020/04/07 Python
python dict乱码如何解决
2020/06/07 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
2015年中学体育教师工作总结
2015/10/23 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android