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的Django框架中manage命令的使用与扩展
Apr 11 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Python for循环生成列表的实例
Jun 15 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
Python实现单例模式的5种方法
Jun 15 Python
Python如何让字典保持有序排列
Apr 29 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
python读取指定字节长度的文本方法
2019/08/27 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
python中time、datetime模块的使用
2020/12/14 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
联想中国官方商城:Lenovo China
2017/10/18 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
安全事故检讨书
2014/01/18 职场文书
地质灾害防治方案
2014/05/14 职场文书
大学生求职信例文
2014/06/29 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
公司财务管理制度
2015/08/04 职场文书
mysql数据库实现设置字段长度
2022/06/10 MySQL