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中os和shutil模块实用方法集锦
May 13 Python
提升Python程序运行效率的6个方法
Mar 31 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python实现排序算法解析
Sep 08 Python
python+selenium实现自动化百度搜索关键词
Jun 03 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
Python 实现向word(docx)中输出
Feb 13 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
JS实现密码框效果
2020/09/10 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
Python多继承顺序实例分析
2018/05/26 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
python反编译学习之字节码详解
2019/05/19 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
python列表推导式操作解析
2019/11/26 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
2014年元旦活动方案
2014/02/15 职场文书
领导班子四风表现材料
2014/08/23 职场文书
中秋节晚会开场白
2015/05/29 职场文书
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技