如何在matlab中读取图像文件和视频文件?

时间:2016-02-24 12:58:45

标签: 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);

如何将此逻辑合并为一个功能,以便我可以通过一个加载对话框成功加载图像或视频?

1 个答案:

答案 0 :(得分: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);