matlab 处理图片小功能
一、将视频转化成图片
matlab在2013版之前制作视频有avifile以及addframe函数可以使用,但在之后的版本中这两个函数已经被移除,取而代之的是VideoWriter以及writeVideo函数,基本用法一致,具体用法见程序。实际制作视频的参数见VideoWriter的properties。
1、code1
%将图片转化为视频
clear all;
clc;
srcDic = uigetdir('文件夹地址');
cd(srcDic);
allnames = struct2cell(dir('*.jpg'));
[k,len]=size(allnames);
aviobj = VideoWriter('example.avi');
aviobj.FrameRate = 2;
open(aviobj)
for i = 1:len
name = allnames{1,i};
frame = imread(name);
writeVideo(aviobj,frame);
end
close(aviobj)
参考链接
2、code2
clear all;
clc;
function CreatVideoFromPic(dn, picformat,aviname)
% CreatVideoFromPic(dn, picformat,aviname)
% 将某个文件夹下某种格式的所有图片合成为视频文件
% dn : 存储图片的文件夹
% picformat : 要读取的图片的格式,如png、jpg等形式,字符串数组
% aviname : 存储的视频的文件名
% example : CreatVideoFromPic( './', 'png','presentation.avi');
if ~exist(dn, 'dir')
error('dir not exist!!!!');
end
picname=fullfile( dn, strcat('*.',picformat));
picname=dir(picname);
aviobj = VideoWriter(aviname);
open(aviobj);
for i=1:length(picname)
picdata=imread( fullfile(dn, (picname(i,1).name)));
if ~isempty( aviobj.Height)
if size(picdata,1) ~= aviobj.Height || size(picdata,2) ~= aviobj.Width
close(aviobj);
delete( aviname )
error('所有图片的尺寸要相同!!');
end
end
writeVideo(aviobj,picdata);
end
close(aviobj);
end
参考链接
3、code3
clear all;
clc;
file_path = '文件夹地址';
img_path_list = dir(strcat(file_path,'\*.bmp'));
img_num = length(img_path_list);
% path_in='Q:\08-21\11-11\';
% path_in2='C:\Users\Administrator\Desktop\新建文件夹 2\';
% temp1='C:\Users\Administrator\Desktop\视频变单帧图像\视频变单帧图像\bd\';% 路径名1
WriterObj=VideoWriter('tig1647低曝光.mp4');% xxx.avi表示待合成的视频(不仅限于avi格式)的文件路径
% WriterObj2=VideoWriter('2','MPEG-4');% xxx.avi表示待合成的视频(不仅限于avi格式)的文件路径
open(WriterObj);
% for i=1:img_num % n_frames表示图像帧的总数
for i=1:200
frame=imread(strcat(file_path,'\',img_path_list(i).name));% 读取图像,放在变量frame中
%image = double(frame);
%b=frame(211:470,555:854,:);
%image = image /65536 *256;
%image = uint8(image);
writeVideo(WriterObj,frame);% 将frame放到变量WriterObj中
end
close(WriterObj);
%open(WriterObj2);
%for i=1:325 % n_frames表示图像帧的总数
%frame2=imread(strcat(path_in2,num2str(i)),'png');% 读取图像,放在变量frame中
%writeVideo(WriterObj2,frame2);% 将frame放到变量WriterObj中
%end
%close(WriterObj2);
参考链接
4、code4
clear all;
clc;
%使用avifile,可进行很多参数的设定修改
aviobj = avifile('test.avi');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%可调整的参数
% Adjustable parameters:
% Fps: 15.0000
% Compression: 'Indeo5'
% Quality: 75
% KeyFramePerSec: 2.1429
% VideoName: 'test.avi'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%
%%自动获得的参数
% Automatically updated parameters:
% Filename: 'test.avi'
% TotalFrames: 0
% Width: 0
% Height: 0
% Length: 0
% ImageType: 'Unknown'
% CurrentState: 'Open'
%%%%%%%%%%%%%%%%%%%%%%%
%使用addframe把图片写入视频
len = 9;%自己设定图片个数
for i = 1 : len
x=int2str(i);
str=strcat('D:\test\',x,'.jpg');%自己设定路径
picdata = imread(str);
aviobj=addframe(aviobj, picdata);
end
aviobj=close(aviobj);
二、将视频转化成图片
1、code1
clear all;
clc;
%将视频转化成图片
v1=VideoReader('example.avi');%path
for i=1:v1.numberofframes
temp=read(v1,i);
%figure(i)
%imshow(temp);
str = strcat('output',int2str(i),'.jpg')
imwrite(temp,str);
end
2、改变存储图片的分辨率及格式
print -fhandle -rresolution -dfileformat filename
具体使用方法为
print -f1 -r600 -djpeg myfigure
解释为:将句柄为1的图像生成myfigure.jpg文件,分辨率为dpi600
补充:如果要求存为矢量图,可以参数“ -depsc”,其图形可用Adobe Illustrator打开。其他的print命令格式请参考matlab帮助。