对视频中的车辆进行计数,MATLAB仿真

1.仿真预览

2.部分核心代码

clc; close all; clear;
folderPath = 'TrafficVideo\';	  	% 文件夹名称
imageType = '*.jpg';   	% 图像类型
imageFiles = dir([folderPath, imageType]);  % 指定路径下所有指定图像,以结构体形式保存
%% 通过循环遍历所有图像

procNum = length(imageFiles);
m=5;
n=ceil((procNum-1)/4/m);
Road = imread([folderPath,imageFiles(procNum).name]);
GrayRoad = rgb2gray(Road);
figure,imshow(Road);
th=zeros(1,(length(imageFiles)-1)/4);
se1=[1 1 1];
se2=ones(9);
color=[1 0 0;0 1 0;0 0 1;1 0 1;0 1 1;1 1 0;1 1 1];
a=0;
q=0;
for z=1:(length(imageFiles)-1)/4:length(imageFiles)-1
    figure,

    %%%%%%%%%%%%%%%%%%%%%%%%%%求取阈值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for k = z:(length(imageFiles)-1)/4+z-1
        fileName = imageFiles(k).name;     		% 当前文件名,注意这里不含路径信息
        I = rgb2gray(imread( [folderPath, fileName] ))- GrayRoad; 	% 将图像数据读入矩阵
        th(k-z+1)=graythresh(I);
    end
    th1=sum(th)/length(th)-0.045;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    for k = z:(length(imageFiles)-1)/4+z-1
        fileName = imageFiles(k).name;     		% 当前文件名,注意这里不含路径信息
        I0 = imread([folderPath, fileName]);
        % J=midfilter(I);
        I = rgb2gray(I0)- GrayRoad; 	% 将图像数据读入矩阵
        %     [mu,mask]=kmeans(J,2);
        %     th=graythresh(I);
        %         I=midfilter(I);                 %中值滤波
        I=im2bw(I,th1);                 %分割
        J=midfilter(I);

        I=imclose(J,se2);               %闭运算
        I=imopen(I,se1);                %开运算

        [Car,num,Rect] = CarProc(I);   %标记、计数、求坐标
        subplot(m,n,k-z+1);imshow(I0,[]); title(num2str(k))
        midCar=Car;
        if k~=1
            for v=1:num
                [r,c]=size(Car);
                Car1=Car;
                for x=1:r
                    for y=1:c
                        if Car1(x,y)~=v
                            Car1(x,y)=0;
                        end
                    end
                end
                J=Car1.*Car0;
                if J==0
                    [r1,c1]=find(Car1~=0);
                    a=a+1;
                    for k1=1:length(r1)
                        midCar(r1(k1),c1(k1))=a;
                    end
                      q=a;
                      if (q>7)&&(q<=14)
                          q=q-7;
                      end
                       if q>14
                          q=q-14;
                      end
                      rectangle('Position',Rect(v,:),'EdgeColor',color(q,:),'LineWidth',1);
                    text(Rect(v,1),Rect(v,2),num2str(a),'color','r');
                else
                    [r1,c1]=find(Car1~=0);
                    [c2,d2]=find(Car1.*Car0~=0);
                    for k1=1:length(r1)
                        midCar(r1(k1),c1(k1))=Car0(c2(1),d2(1));
                    end  
                    g=Car0(c2(1),d2(1));
                    if (Car0(c2(1),d2(1))>7)&&(Car0(c2(1),d2(1))<=14)
                        g=Car0(c2(1),d2(1))-7;
                    end
                    if Car0(c2(1),d2(1))>14
                        g=Car0(c2(1),d2(1))-14;
                    end
                        rectangle('Position',Rect(v,:),'EdgeColor',color(g,:),'LineWidth',1);
                    text(Rect(v,1),Rect(v,2),num2str(Car0(c2(1),d2(1))),'color','r');
                    end
            end
        else
            for v=1:num
                if num>0
                    a=a+1;
                    text(Rect(v,1),Rect(v,2),num2str(a),'color','r');
                    rectangle('Position',Rect(v,:),'EdgeColor',color(q,:),'LineWidth',1);
                end
            end
        end
        Car0=midCar;
        end
end
% search(1);                       %图像检索

C70

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值