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帮助。

参考链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值