2016-02-24 81 views
-2

我需要创建一个“浏览”按钮,允许用户选择图像或视频文件,但在这些数据类型中读取的逻辑是不同的。如何读取matlab中的图像文件和视频文件?

浏览和读取视频文件

FileName = uigetfile('*.avi','Select the avi file'); 
v = VideoReader(FileName); 
video = readFrame(v); 
imshow(video, 'Parent', handles.axes1); 

浏览和读取图像文件

[FileName PathName] = uigetfile('*.jpg','Select the jpg file'); 
Image = imread([PathName FileName]); 
imshow(Image, 'Parent', handles.axes1); 

如何合并这样的逻辑成一个功能,这样我可以成功加载任何图像或一个负载对话框的视频?

+4

提供多个过滤器,我不知道你在问什么。 – excaza

+1

使用'fileparts'来获得扩展名,然后区分两者。 – Daniel

回答

0

您可以允许用户选择任何文件,然后使用扩展名来确定要执行的操作。

[fname, pname] = uigetfile('*.*', 'Select an Image or Video File'); 
filename = fullfile(pname, fname); 

[~, ~, extension] = fileparts(filename); 

switch lower(extension) 
    case {'.jpg', '.png', '.tif'} 
     img = imread(filename); 
    case {'.avi', '.mpg'} 
     reader = VideoReader(filename); 
     img = readFrame(reader); 
    otherwise 
     error('Invalid file selected'); 
end 

imshow(img, 'Parent', handles.axes1); 

或者你可以到uigetfile

filters = {'*.jpg', '*.avi'}; 

[fname, pname, findex] = uigetfile(filters, 'Select a Video or Image'); 

filename = fullfile(pname, fname); 

if findex == 1 % jpeg 
    img = imread(filename); 
elseif findex == 2 % avi 
    reader = VideoReader(filename); 
    img = reader.readFrame(); 
end 

imshow(img, 'parent', handles.axes1); 
+0

是的,它是正确的。谢谢。 – kwaakwang

相关问题