imwrite在Matlab中给出不一致的错误

时间:2018-02-10 09:55:18

标签: matlab strcat imread

我写了一个代码来清理和打印多个图像,

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工作

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”

1 个答案:

答案 0 :(得分:3)

MATLAB仍然是transitioning to the new string class。传统上,MATLAB总是使用需要字符串的char数组。他们在R2016b中引入了string类,并且还没有更新所有工具箱中的所有函数,还要使用string来获取char数组。

我正在使用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'));