image - imwrite 不接受第二个参数

标签 image matlab

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

其中用户路径如下所示:

enter image description here

最佳答案

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 specify fmt 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/

相关文章:

python - Python 中的 Plot3d

matlab - 在 Matlab 中如何交换现有绘图的水平轴和垂直轴

matlab - 提取分布值 Matlab

android - 如何在选择器的可绘制对象中应用色调?

c++ - 来自 std::vector<std::uint32_t> 保存数组中原始 RGB 值的 CBitmap

安卓上传图片

linux - 如何使用linux的convert命令转换图片格式?

Matlab 'heatmap' 与散点图数据

arrays - MatLab - 结构和字段数组

java - 使用 PHP 或 Java 将带有foreignObject 标签的 svg 导出为图像