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 相关文章推荐
Linux下Python获取IP地址的代码
Nov 30 Python
python用来获得图片exif信息的库实例分析
Mar 16 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
pandas数据集的端到端处理
Feb 18 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
Python的Lambda函数用法详解
Sep 03 Python
Django配置MySQL数据库的完整步骤
Sep 07 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 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
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
pycharm安装和首次使用教程
2018/08/27 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
枚举与#define宏的区别
2014/04/30 面试题
linux面试题参考答案(10)
2016/10/26 面试题
综合测评自我鉴定
2013/10/08 职场文书
先进事迹报告会感言
2014/01/24 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
教师听课评语大全
2014/12/31 职场文书
大学生求职意向书
2015/05/11 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android