trafficObj = mmreader('traffic.mj2')
get(trafficObj)
implay('traffic.mj2');
darkCarValue = 80;
darkCar = rgb2gray(read(trafficObj,71));
noDarkCar = imextendedmax(darkCar, darkCarValue);
imshow(darkCar)
figure, imshow(noDarkCar)
sedisk = strel('disk',2);
noSmallStructures = imopen(noDarkCar, sedisk);
imshow(noSmallStructures)
nframes = get(trafficObj, 'NumberOfFrames');
I = read(trafficObj, 1);
taggedCars = zeros([size(I,1) size(I,2) 3 nframes], class(I));
for k = 1 : nframes
singleFrame = read(trafficObj, k);
%转换成灰度图像
I = rgb2gray(singleFrame);
% 去除深色车辆
noDarkCars = imextendedmax(I, darkCarValue);
% 去除车辆标识线
noSmallStructures = imopen(noDarkCars, sedisk);
% 去除小结构物体
noSmallStructures = bwareaopen(noSmallStructures, 150);
% 获取在该帧的其余的每个对象的面积和形心。
% 最大面积的对象是浅色的汽车。
% 创建一个原始帧的副本并通过改变标记车的重心像素为红色。
taggedCars(:,:,:,k) = singleFrame;
stats = regionprops(noSmallStructures, {'Centroid','Area'});
if ~isempty([stats.Area])
areaArray = [stats.Area];
[junk,idx] = max(areaArray);
c = stats(idx).Centroid;
c = floor(fliplr(c));
width = 2;
row = c(1)-width:c(1)+width;
col = c(2)-width:c(2)+width;
taggedCars(row,col,1,k) = 255;
taggedCars(row,col,2,k) = 0;
taggedCars(row,col,3,k) = 0;
end
end
frameRate = get(trafficObj,'FrameRate');
implay(taggedCars,frameRate);
评论4
最新资源