我是 MATLAB 新手。我正在使用 imwrite 在用户选择的特定文件夹中写入图像,但它给了我以下错误
Error using imwrite>parse_inputs
The colormap should have three columns.
Error in imwrite (line 440)
[data, map, filename, format, paramPairs] = parse_inputs(varargin{:});
我的代码是
imwrite(latest_data,userpath,'bmp');
其中用户路径如下所示:
最佳答案
TL;DR
您需要在文件路径中使用字符('单引号'
)而不是字符串(“双引号”
)。您可以在定义 userpath
变量时实现这种情况,也可以在输入 imwrite
时使用 char(userpath)
。
此错误似乎已由 R2018b 修复,因此可能是 R2016b(引入字符串时)到至少 R2017b(已测试)之间的问题。
说明
由于输入解析方式的怪异,这看起来像是 imwrite
函数中稍微出乎意料的行为。
来自documentation
,函数的调用方式主要有3种
imwrite(A,filename)
imwrite(A,map,filename)
imwrite(___,fmt)
特别是最后一个,
imwrite(___,fmt)
writes the image in the format specified by fmt, regardless of the file extension in filename. You can specifyfmt
after the input arguments in any of the previous syntaxes.
您正在尝试执行第三种情况,即 imwrite(A,filename,fmt)
,它应该是有效的。不幸的是,该错误使得 Matlab 似乎正在检测输入 imwrite(A,map,filename)
的第二种情况,因为错误消息报告 map
无效,因为您的filename
不是有效的颜色图。
通常,接受越来越多参数的 Matlab 函数会随着输入数量的增加而保留相同的输入顺序,这使得变量明确。这里的情况并非如此,因为 3 个输入的情况可以用两种不同的方式解释。
但是,从 this on MATLAB Answers 中得到提示,错误消息具有误导性。 imwrite
不支持字符串输入。
事实上,如果您编辑 imwrite
,您可以看到输入解析依赖于 ischar
来确定您在两个 3 输入情况中的哪一个'正在尝试使用。其中varargin
是可变数量的输入,这用于确定哪个是第一个字符串(之前的令人困惑的变量名称)字符串变量存在并且一切都是字符):
因此,如果您使用字符作为文件路径输入,则将选择所需的 3 输入大小写。
firstString = [];
for k = 1:length(varargin)
if (ischar(varargin{k}))
firstString = k;
break;
end
end
关于image - imwrite 不接受第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77051681/