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类的基础入门知识
Nov 24 Python
python求众数问题实例
Sep 26 Python
Python中super关键字用法实例分析
May 28 Python
利用python获取Ping结果示例代码
Jul 06 Python
python 实现UTC时间加减的方法
Dec 31 Python
python flask解析json数据不完整的解决方法
May 26 Python
python里 super类的工作原理详解
Jun 19 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
如何使用python写截屏小工具
Sep 29 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python中的id()函数指的什么
2017/10/17 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
深入浅析Python传值与传址
2018/07/10 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
英国二手物品交易网站:Preloved
2017/10/06 全球购物
毕业生找工作的自我评价
2013/10/18 职场文书
社区学雷锋活动策划方案
2014/01/30 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
中学总务处工作总结
2015/08/12 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书