【问题标题】:How do I access uigetfile elements via a loop?如何通过循环访问 uigetfile 元素?
【发布时间】:2023-03-07 13:10:01
【问题描述】:

我必须通过 matlab GUI 对一组图像执行以下步骤:

  1. 从目录中读取多个图像
  2. 处理它们(在每张图像上应用 imadjust
  3. 在重命名时将它们存储在用户指定的目录或同一目录中

有人可以提供相同的代码吗?在此之后我被卡住了:

[filename, pathname,~] = uigetfile( ...
{'*.jpg;*.jpeg;',...
 'JPEG Files (*.jpg,*.jpeg)';
   '*.png',  'PNG files (*.png)'; ...
   '*.bmp','BMP File (*.bmp)'; ...
   '*.tiff;*.tif','TIFF Files (*.tiff,*.tif)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Pick a file',...
   'Multiselect','on');
set(handles.inputpathtext,'String',pathname);

【问题讨论】:

    标签: image matlab user-interface image-processing


    【解决方案1】:
    [file_name_list, pathname] = uigetfile({'your filter spec','Multiselect','on');
    

    上面的行应该为您提供一个包含您选择的文件名称的元胞数组。以下代码循环遍历元胞数组,读取图像,执行一些调整,并在pathname 指定的同一文件夹中的文件名中添加'processed_' 前缀保存它们。

    for ii = 1:length(file_name_list)
        if iscell(file_name_list)
            filename = file_name_list{ii};
        else
            filename = file_name_list;
        end
        img = imread(fullfile(pathname, filename));
        img = imadjust(img);  % Do something to the image
        imwrite(img, fullfile(pathname, ['processed_', filename])
    end
    

    【讨论】:

    • 该代码完美适用于多个输入。当我添加单个文件时,它会给出错误:来自非单元格数组对象的单元格内容引用。
    • 那是因为当您只有一个输入时,file_name_list 将是一个字符串,而不是字符串的元胞数组。如果您还想考虑单个输入,请检查返回的 file_name_list 是否为元胞数组,不是,将其视为字符串。查看更新的代码。
    • 效果很好。谢谢。你能帮我创建新目录吗?我想保存在路径名\转换。我尝试使用 new_folder = strcat(pathname,'Converted\');和 imwrite(img,fullfile(new_folder,['processed_',file_name_list]));
    • 我建议您阅读 MATLAB 文档做一些功课。您可以在那里轻松找到答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多