将文件夹的图像名称加载到 Matlab 列表框

load folder's images names to a Matlab listbox

我正在尝试将我使用 matlab GUI select编辑的特定文件夹中存在的所有图像名称加载到列表框中。

问题是当我 select 文件夹时:

如果它是空的,我可以看到列表是空的,背景颜色是白色(这是正确的)。

但是当我 select 一个包含图像的文件夹时,列表框从 GUI 中消失。我收到一条警告:

警告:单selection 列表框控件需要标量值

控件在其所有参数值都有效之前不会被渲染

我在这个问题上卡了很久,一直找不到解决的方法

这是我试过的代码:

 % --- Load up the listbox with tif files in folder handles.handles.ImageFolder
function handles=LoadImageList(handles) 

    ListOfImageNames = {};
    folder = handles.ImageFolder;



    if ~isempty(handles.ImageFolder) 
        if exist(folder,'dir') == false
            warningMessage = sprintf('Note: the folder used when this program was last run:\n%s\ndoes not exist on this computer.\nPlease run Step 1 to select an image folder.', handles.ImageFolder);
            msgboxw(warningMessage);
            return;
        end
    else
        msgboxw('No folder specified as input for function LoadImageList.');
        return;
    end
    % If it gets to here, the folder is good.


    ImageFiles = dir([handles.ImageFolder '/*.*']);
    for Index = 1:length(ImageFiles)
        baseFileName = ImageFiles(Index).name;
        [folder, name, extension] = fileparts(baseFileName);
        extension = upper(extension);
        switch lower(extension)
        case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
            % Allow only PNG, TIF, JPG, or BMP images
            ListOfImageNames = [ListOfImageNames baseFileName];
        otherwise
        end
    end
    set(handles.lstImageList,'string',ListOfImageNames);


    return

问题在于您创建的方式 ListOfImageNames。您的代码的结果是一个长字符串,其中包含所有图像名称,没有任何 space 或分隔符。
MATLAB listboxString 属性 需要一个元胞数组,其中包含每行的条带。你可以试试这个:

ListOfImageNames =[];
NumOfImages = 0;
ImageFiles = dir([handles.ImageFolder '/*.*']);
for Index = 1:length(ImageFiles)
    baseFileName = ImageFiles(Index).name;
    [folder, name, extension] = fileparts(baseFileName);
    extension = upper(extension);
    switch lower(extension)
    case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
        % Allow only PNG, TIF, JPG, or BMP images
        NumOfImages = NumOfImages + 1;
        ListOfImageNames{NumOfImages} = baseFileName;
    otherwise
    end
end
set(handles.lstImageList,'string',ListOfImageNames);

当 Matlab uicontrol 的某些参数设置为无效值时,就会发生这种情况。 Matlab 选择不显示它们。

对于您的情况,错误消息告诉您 Value 参数不正确。

你的listbox被定义为“单选”,这意味着你一次只能选择一行。 Value 参数表示选中的行号。此参数必须是 "scalar",单个数字,而不是表示所选多行的向量(可能使用 "multi-selection" 列表框)。

请注意,Matlab 也不支持空的 Value,因此如果您的 Value 设置为 [],则在填充 lisbox 时也会出错。 (至少我的 R2009a 版本没有

解决这个问题的简单方法是在填充 listbox:

的同时设置 Value
set(handles.lstImageList,'string',ListOfImageNames,'Value',1);