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

相關問題