2016-02-24 4 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

Смежные вопросы