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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
python八大排序算法速度实例对比
Dec 06 Python
python实现壁纸批量下载代码实例
Jan 25 Python
Python列表切片操作实例总结
Feb 19 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
Python turtle画图库&amp;&amp;画姓名实例
Jan 19 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
flask开启多线程的具体方法
Aug 02 Python
Django model class Meta原理解析
Nov 14 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 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
Smarty安装配置方法
2008/04/10 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
DWZ刷新dialog解决方法
2013/03/03 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python中的__slots__示例详解
2017/07/06 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
python实现复制大量文件功能
2019/08/31 Python
Python缓存技术实现过程详解
2019/09/25 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
EJB的激活机制
2013/10/25 面试题
北大自主招生自荐信
2013/10/19 职场文书
网络编辑岗位职责
2014/03/18 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
社区文艺活动方案
2014/08/19 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL