每一帧一个动作,连接起形成一个动画

帧差法:对每一帧进行分析,对帧内分为动态和静态物体,前一帧与后一帧相对移动的物体识别出。
opencv中有专门对帧差的函数,以识别运动中的物体
原视频图像:

函数设计:
返回Mat,前后两帧传入
1、对画面进行灰度处理,图片降到原来1/3,前后两帧都要做

cvtColor(frontFrame,FrontGray,CV_BGR2GRAY);
cvtColor(afterFrame,afterGray,CV_BGR2GRAY);

2、帧差处理,找到帧与帧之间运动的物体(绝对值对比)
前提:必须灰度

absdiff(FrontGray,afterGray,diff);
imshow("diff",diff);

处理结果

缺陷:会把除车辆外其他会动的物体算进来

3、二值化:图像更加灰白分明

threshold(diff,diff,25,255,CV_THRESH_BINARY);
imshow("threshold",diff);

局部阈值:控制二值化,导致产生大量白色噪点

4、腐蚀处理:去除白色噪点,不能完全去除,车辆也会被腐蚀

Mat element=cv::getStructuringElement(MORPH_RECT,Size(3,3));
//处理的,处理后存储,小方块(卷积核)
erode(diff,diff,element);
imshow("erode",diff);


腐蚀原理:创建的方块对原图进行描边,以中心点算缩小的图像边

5、膨胀处理:白色区域变明显
针对二值化数据进行操作,主要针对高亮部分

Mat element1=cv::getStructuringElement(MORPH_RECT,Size(20,20));
dilate(diff,diff,element1);


膨胀原理:方块中心点描图像边,方块外边为图像膨胀后的图形边

膨胀和腐蚀分两种情况:
开运算:先腐蚀在膨胀,消除多余的白色噪点(降噪)
闭运算:先膨胀在腐蚀,排除小型黑洞(填充)

6、动态物体标记:

vector<vector<Point>>contours;
findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
//提取关键点
vector<vector<Point>>contours_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]),contours_poly[i],3,true);boundRect[i]=boundingRect(Mat(contours_poly[i]));x=boundRect[i].x;y=boundRect[i].y;w=boundRect[i].width;y=boundRect[i].height;rectangle(resFrame,Point(x,y+400),Point(x+w,y+300),Scalar(0,255,0),2);}


全部代码

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;Mat moveche(Mat &frontFrame,Mat &afterFrame)
{//第一帧灰度,第二帧灰度Mat FrontGray,afterGray,diff;Mat resFrame=afterFrame.clone();//灰度处理 两帧都要做cvtColor(frontFrame,FrontGray,CV_BGR2GRAY);cvtColor(afterFrame,afterGray,CV_BGR2GRAY);//帧差处理找到每帧之间运动的物体//缺点:会把其他的运动物算进absdiff(FrontGray,afterGray,diff);imshow("diff",diff);//二值化/黑白分名,但是会有白色噪点threshold(diff,diff,25,255,CV_THRESH_BINARY);imshow("threshold",diff);//腐蚀:去噪点,不完全去除,主要物体也会腐蚀Mat element=cv::getStructuringElement(MORPH_RECT,Size(3,3));erode(diff,diff,element);imshow("erode",diff);//膨胀:将白色区域变明显Mat element1=cv::getStructuringElement(MORPH_RECT,Size(20,20));dilate(diff,diff,element1);imshow("dilate",diff);//开运算:先腐蚀在膨胀,消除多余的白色噪点//闭运算:先膨胀在腐蚀,排除小型黑洞//动态物体标记vector<vector<Point>>contours;findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));//提取关键点vector<vector<Point>>contours_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]),contours_poly[i],3,true);boundRect[i]=boundingRect(Mat(contours_poly[i]));x=boundRect[i].x;y=boundRect[i].y;w=boundRect[i].width;y=boundRect[i].height;rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,255,0),2);}return resFrame;
}int main()
{//当前帧画面Mat frame;//上一帧画面Mat temp;//检测是否有处理结果Mat res;//判断是否第一帧int count=0;//加载视频VideoCapture cap("./carMove.mp4");//读取视频的每一帧while(cap.read(frame)){count++;//是第一帧if(count==1){res=moveche(frame,frame);}//不是第一帧else{res=moveche(temp,frame);}temp=frame.clone();imshow("frame",frame);imshow("res",res);waitKey(25);}return 0;
}

缺陷:帧和帧间所有运动的物体都会被识别

择优:级联分类器

图像处理+帧差法实现对车辆的识别框选相关推荐

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

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

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

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

  3. 图片区域帧差法识别物体_matlab

    PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 当初又到了本科生结业的时候,很多学同都在写毕设了.想想客岁帮我的女神做了 个 ...

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

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

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

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

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

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

  7. 基于混合高斯模型与帧差法结合的目标跟踪算法matlab仿真

    目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 目标检测:混合高斯模型与帧差法结合的算法,与单独的混合高斯模型算法作对比,体现前者的优越性 3.要求和结果:对比改进前后的算法,可以非 ...

  8. 利用python语言实现帧差法,python+opencv实现帧差法

    实验效果如下图: 需要的可以下载代码文件直接就可以运行看看效果哦. 帧差法实现运动目标检测

  9. 前景检测算法(三)--帧差法

     原文:http://www.cnblogs.com/tornadomeet/archive/2012/05/01/2477629.html 前景检测算法_2(帧差法1) 帧差法是背景减图法中的一 ...

最新文章

  1. NLP重要模型详解,换个方式学(内附资源)
  2. 用GrabCut进行前景检测(对书中代码进行改进)Python
  3. 朱明亮:参与开源软件让业余时间更有意义
  4. Linux服务器环境搭建《Redis、Nginx、mysql8安装》
  5. float强制转换的问题及解释
  6. Linux 多播(组播)例程
  7. VB连接oracle数据库
  8. Kotlin学习笔记 —— 函数,字符串,可空性以及标准库函数(2)
  9. 关于支付宝口碑的界面问题
  10. 再好的技术,再完美的规章,也无法取代人自身的素质和责任心
  11. sklearn.neighbors_Nearest Neighbors
  12. 学计算机小学教师资格证,教师资格证我现在在一间小学教计算机,但现在 – 手机爱问...
  13. 测试点 - 发朋友圈
  14. 图片批量下载 +图片马赛克:多张图片组成端午安康!
  15. POJ1849 Two(树的直径)
  16. html引入let,let.html
  17. 考研数学-基础阶段几何串讲1主讲人:王淳 -2020年06月26日
  18. 无碳越障S型小车总体设计(lunwen+工序卡+过程卡+cad图纸+proe三维图纸+运动仿真视频)
  19. php excel多级下拉菜单自动匹配,Excel下拉菜单怎么做 多级联动+自动匹配教程
  20. Swing中滚动面板JScrollPanede使用

热门文章

  1. Gannicus Guo的DIY TCP/IP之旅
  2. 缓冲器74HC541D/SN74HC541PWR/74HC541PW/AIP74HC541最新中文资料
  3. .NET(C#、VB)APP开发——Smobiler平台控件介绍:BarcodeReader组件
  4. ab命令压力测试攻击
  5. PythonStudy4
  6. 洛谷P3150 pb的游戏(1)
  7. Frame--ddt
  8. Linux的tar命令
  9. Parallels Desktop 网络初始化失败解决方法
  10. 【Educoder离散数学实训】关系基础