matlab imwrite不接受第二个参数

yvfmudvl  于 7个月前  发布在  Matlab
关注(0)|答案(1)|浏览(97)

我是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');

其中userpath如下所示:

olmpazwi

olmpazwi1#

TL;DR

你需要在文件路径中使用一个字符('single quotes')而不是字符串("double quotes")。您可以在定义userpath变量时使用这种情况,或者在输入imwrite时使用char(userpath)
R2018 b似乎已经修复了这个bug,所以很可能是R2016 b(引入字符串时)到至少R2017 b(测试)之间的问题。

说明

这看起来有点像imwrite函数的意外行为,因为输入的解析方式有点奇怪。
documentation中,有3种主要的方法调用函数

imwrite(A,filename)
imwrite(A,map,filename)
imwrite(___,fmt)

尤其是最后一个,
imwrite(___,fmt)以fmt指定的格式写入图像,而不考虑文件名中的文件扩展名。您可以在前面任何语法中的输入参数后指定fmt
你正在尝试第三种情况,即。imwrite(A,filename,fmt),应该是有效的。不幸的是,错误使Matlab似乎正在检测输入imwrite(A,map,filename)的第二种情况,因为错误消息报告map无效,因为您的filename不是有效的色彩Map表。
通常情况下,接受越来越多的参数的Matlab函数会随着输入数量的增加而保持相同的输入顺序,这使得变量变得明确。这里的情况并非如此,因为3个输入的情况可以以两种不同的方式解释。
然而,从MATLAB Answers上得到的提示,错误消息是误导性的。
imwrite不支持字符串输入。**
事实上,如果你使用edit imwrite,你可以看到**输入解析依赖于ischar来确定你想要使用的是两个3输入的情况中的哪一个。**其中varargin是一个可变的输入数量,这是用来确定哪个是第一个 string(在字符串变量存在之前的一个令人困惑的变量名,一切都是char):
因此,如果您使用char作为文件路径输入,那么将选择所需的3输入情况。

firstString = [];
for k = 1:length(varargin)
    if (ischar(varargin{k}))
        firstString = k;
        break;
    end
end

相关问题