登录论坛

查看完整版本 : 讨论图像读取问题


xiami0532
2009-02-14, 10:42
大家好,我现在有一个问题,想和大家讨论一下。
我知道单幅图像读取可以用imread读取,也知道在同一文件夹下读取多幅图像的批处理。
现在我想请问,在matlab中能否自动读取带有多层文件夹下的文件,譬如
一层文件夹为A,二层文件夹是1和2两个文件夹,文件夹1中有2幅图像,文件夹2中有3副图像,也就是路径为C:\A\1\11.bmp,C:\A\1\12.bmp,C:\A\2\21.bmp.......
当然前提是只需要修改一次就足够了,不用每次都修改路径~

linkingoo
2009-03-02, 08:47
请问如何在同一文件夹下读取多幅图像的批处理?

wangxiuyuan
2009-03-02, 09:51
就是拼字符串吧,设一个base_name='C:\A\'; 后面要什么就接上去。

同一个文件夹下读取多个图像也一样,比如图像是a_1.bmp, a_2.bmp,写一个循环,然后拼起来 ['a_' num2str(i) '.bmp']就把所有的文件读出来了

linkingoo
2009-03-03, 16:54
就是拼字符串吧,设一个base_name='C:\A\'; 后面要什么就接上去。

同一个文件夹下读取多个图像也一样,比如图像是a_1.bmp, a_2.bmp,写一个循环,然后拼起来 ['a_' num2str(i) '.bmp']就把所有的文件读出来了

可是这样的话 imread('a_' num2str(i)'.bmp') 本身就是错的啊! 也不能这么用啊!单引号里直接读取的就是字符串,而不是num2str(i) 的命令!

wangxiuyuan
2009-03-03, 23:20
这个命令不能用imread直接读取,它只是定义了文件名字符串而已。举个例子:
filename = ['a_' num2str(i) '.BMP'];
img=imread(filename);

wangxiuyuan
2009-03-03, 23:23
或者你写 imread( ['a_' num2str(i) '.bmp'])应该也可以,中括号这里很重要,不能漏掉

xiami0532
2009-03-09, 16:54
在同一路径下的同一个文件夹里面连续读取多幅图像的程序可以参考如下:
cd C:\image \\假设文件夹是C盘下的image文档
cd_name='C:\image';
dat=stuct2cell(dir);
[m,n]=size(dat);
for i=1:n
name=dat(1,i);
name_str=name{1,1};
len_test=length(name_str);
if len_test>3%%判断是不是所包含的单元是不是3个字符以上
name_str_test=name_str(len_test-2:len_test);
else
name_str_test=name_str;
end
if strcmp(name_str_test,'bmp') || strcmp(name_str_test,'jpg')||strcmp(name_str_test,'BMP')||strcmp(name_str_test,'tif')%%比较后三位是不是所需要的文件格式
FILENAME0=strcat(cd_name,'\',name_str);
J0=imread(FILENAME);
end
end