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 Pygame的具体使用讲解
Nov 03 Python
python图像常规操作
Nov 11 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
深入了解Django中间件及其方法
Jul 26 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
Python读取实时数据流示例
Dec 02 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
django如何自定义manage.py管理命令
Apr 27 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
drupal 代码实现URL重写
2011/05/04 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
Python创建日历实例
2014/08/21 Python
Python中关于字符串对象的一些基础知识
2015/04/08 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
使用python实现简单五子棋游戏
2019/06/18 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
巧克力蛋糕店创业计划书
2014/01/14 职场文书
村官工作鉴定评语
2014/01/27 职场文书
不假外出检讨书
2014/01/27 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
考研经验交流会策划书
2015/11/02 职场文书
python中的被动信息搜集
2021/04/29 Python
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
vue组件vue-esign实现电子签名
2022/04/21 Vue.js