一、帧差法

1.概念:

帧差法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况。它可以很好地适用于存在多个运动目标和摄像机移动的情况。 当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值 ,判断它是否大于阈值 来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。 图像序列逐帧的差分,相当于对图像序列进行了时域下的 高通滤波 。

简单理解就像是翻页动画,就像下面这样

二、进入实战——检测车辆运动

操作步骤

1.灰度处理

//灰度处理
cvtColor(forntFrame,frontGray,CV_BGR2GRAY);
cvtColor(afterFrame,afterGray,CV_BGR2GRAY);

目的:减小图片大小,提高计算机处理速度

2.帧差处理

//帧差处理
absdiff(frontGray,afterGray,diff);

目的:找到帧与帧之间的区别

 原图                                                                      灰度图

3.二值化

//二值化
threshold(diff,diff,25,255,CV_THRESH_BINARY);

目的:就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。凸显出目标的轮廓。

 原图                                                                     二值化

4.腐蚀处理

//腐蚀处理:
Mat element=cv::getStructuringElement(MORPH_RECT,Size(3,3));
erode(diff,diff,element);

目的:将目标的边缘的“毛刺”踢除掉。使目标物体更加清晰,轮廓明显。

 原图                                                                     腐蚀处理图

可以看到 环境周围的“杂质”被去除了

5.膨胀处理

//膨胀处理
Mat element2=cv::getStructuringElement(MORPH_RECT,Size(20,20));
dilate(diff,diff,element2);

目的:加粗目标,更加明显

6.对动态物体进行标记(保存关键点)

//动态物体标记
vector<vector<Point>>contours;//保存关键点
findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));

7.提取关键点

//提取关键点
vector<vector<Point>>contour_poly(contours.size());
vector<Rect>boundRect(contours.size());

8.最后进行绘制

int x,y,w,h;
int num=contours.size();for(int i=0;i<num;i++)
{approxPolyDP(Mat(contours[i]),contour_poly[i],3,true);boundRect[i]=boundingRect(Mat(contour_poly[i]));x=boundRect[i].x;y=boundRect[i].y;w=boundRect[i].width;h=boundRect[i].height;//绘制rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,255,0),2);
}

完整代码:

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
//帧差法检测车辆
Mat moveCheck(Mat &forntFrame,Mat &afterFrame)
{Mat frontGray,afterGray,diff;Mat resFrame=afterFrame.clone();//灰度处理cvtColor(forntFrame,frontGray,CV_BGR2GRAY);cvtColor(afterFrame,afterGray,CV_BGR2GRAY);//帧差处理 找到帧与帧之间运动物体差异absdiff(frontGray,afterGray,diff);//imshow("diff",diff);//二值化threshold(diff,diff,25,255,CV_THRESH_BINARY);//imshow("threashold",diff);//腐蚀处理:Mat element=cv::getStructuringElement(MORPH_RECT,Size(3,3));erode(diff,diff,element);//imshow("erode",diff);//膨胀处理Mat element2=cv::getStructuringElement(MORPH_RECT,Size(20,20));dilate(diff,diff,element2);//imshow("dilate",diff);//动态物体标记vector<vector<Point>>contours;//保存关键点findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));//提取关键点vector<vector<Point>>contour_poly(contours.size());vector<Rect>boundRect(contours.size());int x,y,w,h;int num=contours.size();for(int i=0;i<num;i++){approxPolyDP(Mat(contours[i]),contour_poly[i],3,true);boundRect[i]=boundingRect(Mat(contour_poly[i]));x=boundRect[i].x;y=boundRect[i].y;w=boundRect[i].width;h=boundRect[i].height;//绘制rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,255,0),2);}return resFrame;
}int main(int argc, char *argv[])
{Mat frame;Mat temp;Mat res;int count=0;VideoCapture cap("C:/Users/15123/Pictures/Camera Roll/carMove.mp4");while(cap.read(frame)){count++;if(count==1){res=moveCheck(frame,frame);}else{res=moveCheck(temp,frame);}temp=frame.clone();imshow("frame",frame);imshow("res",res);waitKey(25);}return 0;
}

[opencv]学习之帧差法实现运动物体检测相关推荐

  1. 帧差法得到运动背景图像

    本文以火灾视频为例,得到前后两帧变化部分区域,进而可以进行运动物体检测. import cv2 as cv import scipy.ndimagedef medium_filter(im, x, y ...

  2. 相邻帧差法和三帧差法

    相邻帧差法和三帧差法 原文地址:https://blog.csdn.net/dcrmg/article/details/52234929 帧间差分法是通过对视频中相邻两帧图像做差分运算来标记运动物体的 ...

  3. 数字图像处理拓展题目——利用Matlab实现动态目标检测 二帧差法、ViBe法、高斯混合模型法,可应用于学生递东西行为检测

    1.二帧差法实现动态目标检测 先上效果图: 利用GUI界面显示出来效果图为: 实现流程 1.利用matlab中的VideoReader函数读取视频流. 2.帧差法:获得视频帧数,用for循环对图像每相 ...

  4. matlab帧间差分法前景提取_matlab采用帧差法实现运动目标检测

    帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况.当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两 ...

  5. 传统目标跟踪——帧差法

    目录 一.帧差法 二.代码 2.1 二帧差法 2.2 三帧差法 三.总结 一.帧差法 计算帧之间的差异,或考虑"背景帧"与其他帧之间的差异. 当视频中存在移动物体的时候,相邻帧(或 ...

  6. Python实现视频运动目标检测——帧差法

    Python实现视频运动目标检测--帧差法 在许多场景中,我们需要对视频中的运动目标进行检测.而在这个过程中,帧差法是一种常用的方法.本文将详细阐述Python如何利用帧差法实现视频运动目标检测. 首 ...

  7. 【opencv】(11) 背景建模,帧差法、混合高斯模型,实战:行人检测,附python完整代码和数据集

    各位同学好,今天和大家分享一下opencv背景建模相关操作.主要介绍两种背景建模方法,帧差法和混合高斯模型. 案例简介:现有一份路口摄像机拍摄的行人流视频,通过背景建模方法,区分背景和前景,完成行人识 ...

  8. python识别重影验证码_python+opencv实现移动侦测(帧差法)

    本文实例为大家分享了python+opencv实现移动侦测的具体代码,供大家参考,具体内容如下 1.帧差法原理 移动侦测即是根据视频每帧或者几帧之间像素的差异,对差异值设置阈值,筛选大于阈值的像素点, ...

  9. opencv进阶-背景建模-(帧差法与混合高斯模型)

    背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤.如果我们有完整的静止的背景帧,那么我们可以通过帧差法来计算像素差从而获取到前景对象.但是在大多数情 ...

  10. Python与OpenCV(一)——基于帧差法的运动目标检测程序分析

    OpenCV提供了强大的图像处理功能,与Python的结合堪称完美... 这一次,我们试一下用帧差法来完成对运动目标的检测与跟踪. 帧差法的原理是这样的:由于摄像机采集的视频序列具有连续性的特点,所以 ...

最新文章

  1. linux内核杂记(13)-系统调用(1)
  2. dalvik虚拟机与Java区别_05 Android---java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)...
  3. 牛客网 - 机器人走方格 (动态规划)
  4. Windows Server 2003 系统安装
  5. 蓝桥杯 ADV-144算法提高 01背包
  6. AngularJs学习笔记0——前言
  7. 编译全志A31出现的错误
  8. 文献阅读笔记之 - - 48V锂电池管理系统的设计与实现(贾小龙)
  9. 【JavaWeb】在office word中使用merge field出现空行问题
  10. PV、UV、访问次数、跳出率、转化率、平均访问时长
  11. 【Word】双栏论文尾页文字齐平排版的实现
  12. 新手小白安装linux系统
  13. js 公众号 获取code_微信公众号开发之网页授权登录及code been used 解决!
  14. .NET Core 人工智能系列-概述
  15. 4位先行进位加法器的vhdl程序_VHDL精密,Verilog简洁,但要写好都要遵守这25条通则...
  16. 360快传号,会成为下一个自媒体风口吗?
  17. 【presto 】presto 新版本升级详情
  18. Java网络编程与NIO详解14:Tomcat 常见面试题汇总
  19. 一进制存在吗?为什么?
  20. Mac电脑声音无法正常播放怎么解决

热门文章

  1. 统一认证 ldap mysql_Centos7 Ldap统一认证部署
  2. html5 css3 JavaScript响应式中文静态网页模板js源代码
  3. Linux性能统计工具
  4. Power BI Desktop 中的数据源
  5. 自适应滤波器(Adaptive Filter)
  6. 【工控老马】S7-200通过自由口控制Modbus变频器正反转实例详解
  7. 【CAD2021】快捷键/基础操作大全
  8. 2020洪灾地图_卫星地图看洪灾:“告急”的鄱阳湖发生了什么?
  9. 2019数据安装勾选_Origin2019下载和安装教程
  10. solidworks流体模拟分析概述