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

imwrite giving inconsistent error in Matlab

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

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 字符串。 显示的错误是:

Error using imwrite>parse_inputs (line 510)

A filename must be supplied.

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

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

MATLAB 仍然有点 transitioning to the new string class。传统上,MATLAB 总是在需要字符串的地方使用 char 数组。他们在 R2016b 中引入了 string class,并且还没有更新所有工具箱中的所有函数,还采用了 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'));