我写了一个代码来清理和打印多个图像,
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”
答案 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'));