前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片批量处理

图片批量处理

作者头像
万木逢春
发布2019-06-03 09:45:48
2K0
发布2019-06-03 09:45:48
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab

批量处理

%%

% 读取文件夹下所有文件,把文件名作为数组

fileFolder = fullfile(matlabroot,'toolbox','images','imdata');

dirOutput = dir(fullfile(fileFolder,'AT3_1m4_*.tif'));

fileNames = {dirOutput.name}'

numFrames = numel(fileNames)

%%

% 将所有图像存入一个多为数组

I = imread(fileNames{1});

sequence = zeros([size(I) numFrames],class(I));

% class(I)获取图像数据类型,此处为uint8

sequence(:,:,1) = I;

for p = 2:numFrames

sequence(:,:,p) = imread(fileNames{p});

end

%%

% 图像局部标准差滤波

sequenceNew = stdfilt(sequence,ones(3));

%%

% 处理前后图像轮播

figure;

for k = 1:numFrames

imshow(sequence(:,:,k));

title(sprintf('Original Image # %d',k));

pause(1);

imshow(sequenceNew(:,:,k),[]);

title(sprintf('Processed Image # %d',k));

pause(1);

end

%% 读取视频

trafficVid = VideoReader('traffic.mj2')

get(trafficVid)

%% 播放视频

implay('traffic.mj2');

%% 去除深色车

darkCarValue = 50;

darkCar = rgb2gray(read(trafficVid,71));

noDarkCar

= imextendedmax(darkCar, darkCarValue);

% 最大扩展变换,作用效果类似二值化,第二个参数为阈值

imshow(darkCar)

figure, imshow(noDarkCar)

%% 图像开操作,去除小白点

sedisk = strel('disk',2);

noSmallStructures = imopen(noDarkCar, sedisk);

imshow(noSmallStructures)

%% 对每一帧进行同样的处理

nframes = trafficVid.NumberOfFrames;

I = read(trafficVid, 1);

taggedCars = zeros([size(I,1) size(I,2) 3 nframes], class(I));

for k = 1 : nframes

singleFrame = read(trafficVid, k);

% 一样的处理过程

I = rgb2gray(singleFrame);

noDarkCars = imextendedmax(I, darkCarValue);

noSmallStructures = imopen(noDarkCars, sedisk);

noSmallStructures = bwareaopen(noSmallStructures, 150);

% 删除二进制图像中像素小于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 = trafficVid.FrameRate;

implay(taggedCars,frameRate);

相关文件均属matlab自带,直接运行即可

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档