图像处理+帧差法实现对车辆的识别框选
每一帧一个动作,连接起形成一个动画
帧差法:对每一帧进行分析,对帧内分为动态和静态物体,前一帧与后一帧相对移动的物体识别出。
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;
}
缺陷:帧和帧间所有运动的物体都会被识别
择优:级联分类器
图像处理+帧差法实现对车辆的识别框选相关推荐
- 数字图像处理拓展题目——利用Matlab实现动态目标检测 二帧差法、ViBe法、高斯混合模型法,可应用于学生递东西行为检测
1.二帧差法实现动态目标检测 先上效果图: 利用GUI界面显示出来效果图为: 实现流程 1.利用matlab中的VideoReader函数读取视频流. 2.帧差法:获得视频帧数,用for循环对图像每相 ...
- 相邻帧差法和三帧差法
相邻帧差法和三帧差法 原文地址:https://blog.csdn.net/dcrmg/article/details/52234929 帧间差分法是通过对视频中相邻两帧图像做差分运算来标记运动物体的 ...
- 图片区域帧差法识别物体_matlab
PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 当初又到了本科生结业的时候,很多学同都在写毕设了.想想客岁帮我的女神做了 个 ...
- matlab帧间差分法前景提取_matlab采用帧差法实现运动目标检测
帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,它可以很好地适用于存在多个运动目标和摄像机移动的情况.当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两 ...
- Python与OpenCV(一)——基于帧差法的运动目标检测程序分析
OpenCV提供了强大的图像处理功能,与Python的结合堪称完美... 这一次,我们试一下用帧差法来完成对运动目标的检测与跟踪. 帧差法的原理是这样的:由于摄像机采集的视频序列具有连续性的特点,所以 ...
- 传统目标跟踪——帧差法
目录 一.帧差法 二.代码 2.1 二帧差法 2.2 三帧差法 三.总结 一.帧差法 计算帧之间的差异,或考虑"背景帧"与其他帧之间的差异. 当视频中存在移动物体的时候,相邻帧(或 ...
- 基于混合高斯模型与帧差法结合的目标跟踪算法matlab仿真
目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 目标检测:混合高斯模型与帧差法结合的算法,与单独的混合高斯模型算法作对比,体现前者的优越性 3.要求和结果:对比改进前后的算法,可以非 ...
- 利用python语言实现帧差法,python+opencv实现帧差法
实验效果如下图: 需要的可以下载代码文件直接就可以运行看看效果哦. 帧差法实现运动目标检测
- 前景检测算法(三)--帧差法
原文:http://www.cnblogs.com/tornadomeet/archive/2012/05/01/2477629.html 前景检测算法_2(帧差法1) 帧差法是背景减图法中的一 ...
最新文章
- Spring学习6之自动装配Bean02
- Zookeeper_原生API操作(一)
- keras时间序列数据预测_使用Keras的时间序列数据中的异常检测
- 如何在服务器运行aspx_ASP.NET开发实战——(四)MVC是如何运行?它的生命周期是什么?...
- 操作系统的 (program)loader(程序加载器)
- SpringBoot整合Dubbo案例
- 微软sql服务器双机热备,office2014-SQL Server2014 R2 双机热备,保护你的数据
- 获取cad注册表路径
- python中open函数打开文件_Python中open函数怎么操作文件--9
- 9月【笔耕不辍】勋章活动获奖名单公布
- SOA、RPC/REST 和六边形架构
- 买房贷款月供怎么算?贷款利息是多少?
- USB声卡噪音问题,USB声卡中文名设置,基于STM32F411
- 可爱猫咪,用 CSS 告诉你为何大橘为重!!
- AJAX聊天室无刷新技术方案
- NASA的开源项目介绍
- 尚硅谷Vue3(天禹老师主讲)的笔记
- windows 2008文件服务器审计
- 宏观经济学第13版多恩布什笔记和答案
- webapi+html2canvas实现页面截图(高清,解决偏移)