【问题标题】:imwrite giving inconsistent error in Matlabimwrite 在 Matlab 中给出不一致的错误
【发布时间】:2018-07-21 00:39:37
【问题描述】:

我写了一段代码来清理和打印多张图片,

data_1=csvread(data)
for h=1:30
    im_old=imread(strcat('catches\image_generator (',int2str(h),').png'));
    im_bw=func_bw(im_old);
    im_2=func_clean_tr(im_bw);
    [im_3a,im_3b]=edge_trial(im_2);
    da=data_1{h,2};
    name=strcat('trrr\',da,'trial.png');
    imwrite(im_3b,strcat('trrr\',int2str(h),'trial.png'));
end

有一个特殊的问题。当参数为:

imwrite(im_3b,strcat('trrr\',int2str(h),'trial.png'));

但是当我将参数设置为时它不会起作用:

imwrite(im_3b,strcat('trrr\',da,'trial.png'));

我交叉检查了da 是一个 1x1 字符串,strcat('trrr\',da,'trial.png') 也是一个 1x1 字符串。 显示的错误是:

使用 imwrite>parse_inputs 时出错(第 510 行)

必须提供文件名。

不知道为什么imwrite 对两个字符串的处理方式不同...

Edit1:我的 data_1 如下所示: 1、X55N3 2、PQZXS 3、HDDS3... 此外,da=data_1{h,2}; 的值是“X55N3”

【问题讨论】:

  • 在我看来,MATLAB 通过引入字符串对象和双引号使事情变得更加复杂。注意单引号和双引号是不同的东西,创建不同的类型对象。如果da 是一个字符串,则将它与两个字符数组连接到name。我不知道这会做什么,但这可能是出乎意料的。您是否打印了name 以查看它的外观?
  • 可能name 变成一个字符串,但imwrite 需要一个字符数组?
  • 谢谢,我刚刚读到imread 的输入是只允许字符数组,不允许字符串。

标签: matlab strcat imread


【解决方案1】:

MATLAB 仍然是 transitioning to the new string class。传统上,MATLAB 总是在需要字符串的地方使用 char 数组。他们在 R2016b 中引入了 string 类,并且尚未更新所有工具箱中的所有函数,以在他们过去采用 char 数组的地方也采用 string

我正在使用 R2017a,当使用带有字符串的 imread 时看到这个:

>> imread("cameraman.tif");
Error using imread>parse_inputs (line 450)
The file name or URL argument must be a character vector.

Error in imread (line 322)
[filename, fmt_s, extraArgs, was_cached_fmt_used] = parse_inputs(cached_fmt, varargin{:});

但是,这是可行的:

>> imread(char("cameraman.tif"));

所以您的解决方案是将string 转换为char 数组:

imwrite(im_3b,char(strcat('trrr\',da,'trial.png')));

或:

imwrite(im_3b,strcat('trrr\',char(da),'trial.png'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多