matlab 图片转化为avi,利用Matlab将多张图片转化为AVI | 学步园

前段时间,无所事事,就帮人写了一个将多张图片转化为AVI的程序,因为图方便就采用了Matlab语言!

其实整个程序和流程都很简单,就是将一个文件夹中的图片依次读入,并将其数据存储到AVI容器中!

整个程序包括两个子程序:getallfile.m-----查找文件夹下包含的所有图片

pic2avi.m  -----图片的显示并储存为AVI文件

下面直接上代码:

%%

% 功能:程序实现了将多幅图片转换为AVI格式

% 说明:1.可以选择是否对图片进行预处理,如果图片都是尺寸相同,图片格式相同,

% 那么可以直接跳过这一步,否则对图片进行预处理操作

% 2.步骤:

% step1: 参数设置

% step2: 遍历目标文件夹下的所有图片,将图片的路径信息保存为结构体

% step3: 按照设定的参数读取图片,并进行预处理操作

% step4: 得到图片信息,转化为AVI,并进行保存

%% step1:参数的设置

clear

clc

disp('第一步,基本参数的设置...................')

%待处理图片的存放文件夹,可以存在子文件夹的情况

dirName = 'D:\MATLAB\work\Study\DATA';

%处理后的文件夹的存放位置,可以不存在,程序会自动生成

desName = 'D:\MATLAB\work\Study\PDATA';

%最终图片的归一化尺寸

thesizex = 500;thesizey=500; thesizez=3; ischangeszie = 0;

%采用RGB还是直接使用Gray的图片

imagetype = 'Gray';

%图片的通用格式设置

fmt = '.bmp';

%% step2:遍历目标文件夹下的所有图片,将图片的路径信息保存为结构体

disp('第二步,获取文件夹下所有的图像文件...................')

%注意:不要在此文件夹下放其他类型的文件,否则会报错

%获取文件夹下所有的文件

fileList = getAllFiles(dirName);

%% step3: 开始对图片进行预处理操作

disp('第三步,开始对对每一张图片进行处理...................')

%图片的数目

img_num = length(fileList);

if img_num ==0;

error('设定的文件夹内没有任何的图片,请重新检查...')

end

for ii = 1:img_num %开始遍历

imgname = fileList{ii};

I_img = imread(imgname);

%转化为灰度图

[sizex,sizey,sizez] = size(I_img);

if sizez ==3&&strcmp(imagetype,'Gray')

I_img = rgb2gray(I_img);

thesizez = 1;

end

if ii==1

disp(strcat('当前尺寸范围为: ',num2str(sizex),' *',num2str(sizey),';\n'));

elseif (ii==1)&&(ischangeszie==1)

disp(strcat('现将所有图片转化为:',num2str(thesizex),'*',num2str(thesizey)));

ischange = input('是否对变换尺寸进行更改:是(1) 否(0)');

if ischange ==1

thesizex = input('请输入归一化图像的高度:');

thesizey = input('请输入归一化图像的宽度:');

end

elseif (ii==1)&&(ischangeszie==0)

disp('不进行图像的尺寸变换');

end

%进行尺寸的归一化操作

if ischangeszie==1

I_img = imresize(I_img,[thesizex,thesizey],'bilinear');

end

%对处理的图片进行统一命名的保存

if ii==1

if not(exist(desName,'dir'))

mkdir(desName);

end

end

imwrite(I_img,strcat(desName,'\',num2str(ii),fmt),fmt(2:end));

end

clear ii I_img sizex sizey sizez fileList

%% step4: 得到图片信息,转化为AVI,并进行保存

%获取文件夹下所有的文件

fileList = getAllFiles(desName);

%图片的数目

img_num_out = length(fileList);

if img_num_out ==0|| img_num_out~=img_num

error('设定的文件夹内的图片数量出现了错误,请重新检查...')

end

%创建一个AVI格式的容器,用于保存图像数据信息

aviobj = avifile('mymovie.avi','fps',1);

%Mdata = zeros(thesizex,thesizey,thesizez,img_num_out,'uint8');

for i=1:img_num_out

%Mdata(:,:,:,i)=imread(fileList{i});

Mdata = imread(fileList{i});

imshow(Mdata)

frame = getframe(gca);

aviobj = addframe(aviobj,frame);

end

aviobj = close(aviobj);

function fileList = getAllFiles(dirName)

% 功能:指定文件路径,获取该路径所包含的所有文件

% 由于采用了嵌套操作,因此可以获取子文件夹的文件

dirData = dir(dirName); %# Get the data for the current directory

dirIndex = [dirData.isdir]; %# Find the index for directories

fileList = {dirData(~dirIndex).name}'; %'# Get a list of the files

if ~isempty(fileList)

fileList = cellfun(@(x) fullfile(dirName,x),... %# Prepend path to files

fileList,'UniformOutput',false);

end

subDirs = {dirData(dirIndex).name}; %# Get a list of the subdirectories

validIndex = ~ismember(subDirs,{'.','..'}); %# Find index of subdirectories

%# that are not '.' or '..'

for iDir = find(validIndex) %# Loop over valid subdirectories

nextDir = fullfile(dirName,subDirs{iDir}); %# Get the subdirectory path

fileList = [fileList; getAllFiles(nextDir)]; %# Recursively call getAllFiles

end

end

相应的测试程序和测试图片包括使用说明在我的资源里下载!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值