Error Brace indexing is not supported
160 ビュー (過去 30 日間)
古いコメントを表示
Life is Wonderful
2023 年 4 月 4 日
コメント済み: Life is Wonderful
2023 年 4 月 4 日
Hi there,
I am having an odd problem, and I'm not sure how to fix the error below. Any assistance would be greatly appreciated.
Brace indexing is not supported for variables of this type.
Many thanks
Following is the code i am using
imageFileNames = imageFileNames(imagesUsed);
originalImage = imread(imageFileNames{1});
Brace indexing is not supported for variables of this type.
class(imageFileNames)
ans =
'char'
imageFileNames
imageFileNames =
'rcngvieo ram'
where imagesUsed =
25×1 logical array
0
0
1
0
0
0
0
1
0
1
1
0
1
1
0
1
1
1
0
1
1
1
0
0
0
3 件のコメント
Stephen23
2023 年 4 月 4 日
"This is not a cell array, it's a char "
Sure, which is exactly why you cannot use curly brace indexing with it.
However I did not ask you what it is, I asked you what you expect it to be. A totally different question.
採用された回答
Image Analyst
2023 年 4 月 4 日
編集済み: Image Analyst
2023 年 4 月 4 日
% Get file listing of all PNG files in the current folder.
fileList = dir('*.png');
% Convert from structure to cell array.
imageFileNames = {fileList.name};
% Load that cell array into a listbox.
handles.listbox1.String = imageFileNames;
Was it from a listbox of file names that you had loaded up previously? Then you can do
% Get a list of all filenames in the listbox.
imageFileNames = handles.listbox1.String;
% Get the indexes the user selected.
imagesUsed = handles.listbox1.Value;
% Extract the selected names into a subset.
selectedImageFileNames = imageFileNames(imagesUsed);
% Get the name of the first one that was selected:
firstImageFileName = imread(selectedImageFileNames{1});
[EDIT}
Most likely the problem was you did this
imageFileNames = [fileList.name] % Used brackets to concatenate.
instead of this
imageFileNames = {fileList.name} % Should use braces to concatenate.
That will give you spaces in the name and make a long character array, rather than a cell array.
See the FAQ to learn when to use parentheses, braces, and brackets:
6 件のコメント
Image Analyst
2023 年 4 月 4 日
That's not how you do it. Try this
imds = imageDatastore({PathToimageFileNames},"FileExtensions",[".png", ".jpg",".tif"]);
imageFileNames = imds.Files
その他の回答 (1 件)
Bora Eryilmaz
2023 年 4 月 4 日
編集済み: Bora Eryilmaz
2023 年 4 月 4 日
Your imageFileNames variable is not a cell array, so you cannot use brace indexing with it. It is a long char array with words separated by spaces. You can use the split command to generate a cell array of char variables from it:
imageFileNames = 'rcngvieo ram'
names = split(imageFileNames, ' ')
names{1}
names{2}
3 件のコメント
Bora Eryilmaz
2023 年 4 月 4 日
I am assuming 'ram' is the file extension for your image file. If that is the case, the way you construct the imageFileNames variable is problematic. The imread command needs the full name of the file, including the file extension.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!