【车辆计数】基于光流法实现车辆检测计数matlab 源码
发布日期:2021-05-04 12:56:06
浏览次数:13
分类:技术文章
本文共 2784 字,大约阅读时间需要 9 分钟。
一、简介
基于matlab行驶车辆检测计数:读入待处理视频,用于色彩空间转换、检测出包含汽车运动的图像块、用高斯混合模型检测背景、对检测出的运动车辆进行框画、标注检测到车辆的个数用于显示结果。
1 案例背景 2 理论基础 2.1 光流法检测运动原理 2.2 光流法的主要方法二、源代码
clear;close all;SE = strel('rectangle',[10 10]); %注意:结构元素必须具有适当的大小BW1=imread('test5.jpg');subplot(221);imshow(BW1);title('原图');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%添加GRAY=rgb2gray(BW1); %灰度图像1h=fspecial('average',9);GRAY=uint8(round(filter2(h,GRAY))); %进行均值滤波subplot(222);imshow(GRAY);title('均值滤波');GRAY = imcrop(GRAY,[10 20 542 355]); %裁剪GRAY=double(GRAY); %转换为double类型[Gx,Gy]=gradient(GRAY); % 计算梯度G=sqrt(Gx.*Gx+Gy.*Gy); % 水平垂直差分J=GRAY; K=find(G<2); %指定灰度级J(K)=0;subplot(223);imshow(J);title('锐化');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%BW2=imdilate(J,SE);%膨胀BW3 = imfill(BW2,'holes'); %填充BW4=imerode(BW3,SE);%腐蚀I=im2bw(BW4);subplot(224);imshow(I);title('目标块');%====形态特征值计算===%A=bwarea(I); % 计算目标的面积I1=edge(I,'canny',0.7);[L, num]=bwlabel(I1,8);%存放提取的目标矩阵和数目STATS = regionprops(L,'BoundingBox');% 存放经过筛选以后得到的所有矩形块 n = 1; wh=zeros(1,num); for i=1:num box = STATS(i).BoundingBox; %图像的长宽 x = box(1); %矩形坐标x y = box(2); %矩形坐标y w = box(3); %矩形宽度w h = box(4); %矩形高度h wh(1,i)=w*h; ux = ceil(x); %取整 uy = ceil(y); if ux > 1 ux = ux - 1; end if uy > 1 end %result(n,:) = [ux uy w h]; R=zeros(h,w); G=zeros(h,w); B=zeros(h,w); for j=1:w for ii=1:h R(ii,j)=BW1(ii+uy-1,j+ux-1,1); B(ii,j)=BW1(ii+uy-1,j+ux-1,3); end end % r(1,n)=mean(mean(R)) % g(1,n)=mean(mean(G)) % b(1,n)=mean(mean(B)) % n = n+1; if(r(1,i)>130&&g(1,i)<130&&b(1,i)<130) disp('检测出车辆是红色') elseif(r(1,i)<130&&g(1,i)>130&&b(1,i)<130) disp('检测出车辆是绿色') elseif(r(1,i)<130&&g(1,i)<130&&b(1,i)>130) disp('检测出车辆是蓝色') elseif(r(1,i)<80&&g(1,i)<80&&b(1,i)<80) disp('检测出车辆是黑色') elseif(r(1,i)>170&&g(1,i)>170&&b(1,i)>170) disp('检测出车辆是白色') else disp('检测出车辆是其他色') endend% 创建系统对象,用于显示结果sz = get(0,'ScreenSize');pos = [20 sz(4)-300 200 200];hVideoOrig = vision.VideoPlayer('Name', 'Original', 'Position', pos);pos(1) = pos(1)+220; %在右侧建立下一个视窗hVideoFg = vision.VideoPlayer('Name', 'Foreground', 'Position', pos);pos(1) = pos(1)+220;hVideoRes = vision.VideoPlayer('Name', 'Results', 'Position', pos);line_row = 23; % 定义感兴趣区域(ROI)% 以下的程序段为对输入的视频图像进行处理while ~isDone(hvfr) image = step(hvfr); % 读入视频的每一帧 y = step(hcsc, image); % 将彩色图像转换成灰度图像% 采用自动白平衡算法去除灰度突变 y = y-mean(y(:)); fg_image = step(hfdet, y); % 检验背景 % 采用数学形态学,在前景图像中检测变化的联通图像块区域的面积 [area, bbox] = step(hblob, fg_image); image_out = image; end
三、运行结果
四、备注
完整代码或者代写添加QQ1575304183
转载地址:https://blog.csdn.net/qq_34763204/article/details/116311646 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月04日 01时53分51秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
终于有人把SaaS讲明白了
2019-04-26
吐血整理:关于机器学习不可不知的15个概念
2019-04-26
什么是标签?跟数据中台有什么关系?终于有人讲明白了
2019-04-26
2013-2021中国一线、新一线城市排行榜,谁在崛起谁在没落?
2019-04-26
编程大神都读过的10本经典神书,找到了
2019-04-26
在公园遛弯大爷的装备上,我瞥见了一个万亿蓝海新市场
2019-04-26
中国高考地狱级难度的省份,找到了
2019-04-26
终于有人把监督学习、强化学习和无监督学习讲明白了
2019-04-26
2021一季度中国十大环境舒适之城,找到了
2019-04-26
pytorch中的tensorboard使用
2019-04-26
图像处理YUV的详解
2019-04-26
QT项目之文件重复检测
2019-04-26
C++学习 -3 C和C++的混合编程及库的调用
2019-04-26
基于QT的仓库礼品出入库管理(第一个给别人使用的软件)
2019-04-26
C++之调用脚本实现复制当前路径指定目录下文件到另外的地方
2019-04-26
C++学习 -2 namespace大全
2019-04-26
海思项目学习记录 -4、H.264及RTSP协议实时传输
2019-04-26
c语言——位运算符及用法
2019-04-26
java安卓开发软件及环境配置
2019-04-26