在matlab中使用MultiSelection时如何检查是否选择了一个文件?

How to check if one file selected when using MultiSelection in matlab?

我有一个功能可以让用户像这样浏览和选择一些图片

[filename, pathname, filterindex] = uigetfile( ...
{  '*.jpg;*.jpeg;*.png','Images (*.jpg, *.jpeg, *.png)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Choose Class 1 DataSet', ...
   'MultiSelect', 'on');

然后我将浏览过的图像放在一个元胞数组中

ChosenImages = strcat(pathname,filename); 

现在我有一个问题,如果用户只输入一张图片,它不会 return 这张图片作为一个单元格,而是 return 每个字符作为单元格,当我使用

length(ChosenImages);

它 return 是 link 中的字符数! 我也试过

ischar(ChosenImages{1})

检查一个单元格是否是一个单元格,但它也给我一个错误。

如何检查用户选择的是一张图片还是多张图片?

您可以使用 class 函数检查 uigetfile 返回的变量 filenametype

  • 如果选择了一个文件,文件名将是char类型
  • 如果选择了多个文件文件名将是cell类型
  • 如果用户中止选择(按 "Cancel"),文件名 的类型将是 double

您可以定义一个 switch 块来处理不同的类型:

[filename, pathname, filterindex] = uigetfile( ...
{  '*.jpg;*.jpeg;*.png','Images (*.jpg, *.jpeg, *.png)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Choose Class 1 DataSet', ...
   'MultiSelect', 'on')

switch(class(filename))
   case 'double'
      disp('Selection aborted')
   case 'char'
      disp('Only one image has been selected')
      ChosenImages = strcat(pathname,filename)
   case 'cell'
      n_img=length(filename)
      disp([num2str(n_img) ' images have been selected'])
      for i=1:n_img
         ChosenImages = strcat(pathname,filename(i))
      end
   otherwise
      disp('Unexpected output')
end

希望对您有所帮助。