Matlab从其他文件夹批量读取存储图片的心得体会

今天做Computer Vision题目发现需要进行大批量图像的导入,以前没有做过相关工作,不过觉得实际做起来并不像想象中那么简单,特别是对我这样的matlab入门级学徒而已更是如此。
先说一下题目要求,先导入一个名为data.matmat文件,里面有一个train的结构体,结构体内部有一个files的细胞数组,细胞数组的每一个元素是需要进行导入图片的文件名。如图一所示:



可以看出,一共需要读入198副图片,并且进行存储。在实际的任务中,这些图片存储的路径经常和当前的工作路径不在一起。因此首先需要解决的问题是如何去别的路径读入一幅图片的问题。
比如我想读入编号为image0011.jpg的图片
可能大家都会想到这么用
im=imread(‘D:\FirstSemester\ComputerVision\Homework\Hw2\hw2\handout\data\image00111.jpg’)
如果这幅名为image0011.jpg当前在你的工作间时,这么用当然正确,现在因为不在当前工作间,因此需要通过引用files中的细胞元素来做同样的工作。因为由图一可看到细胞元素的第一个元素就是image0011.jpg,所以我们这么来写读入语句:
im=imread(‘D:\FirstSemester\ComputerVision\Homework\Hw2\hw2\handout\data\ train.files{1}’)
这句的意思是通过train这个结构体引用细胞数组files中第一个元素image0011.jpg来实现导入图片的作用,但是结果是报错,说找不到文件。
错误的原因是什么呢?原因在于train.files{1}应用的细胞数组元素出来的结果是带单引号的,这样实际上该语句成了
im=imread('D:\FirstSemester\ComputerVision\Homework\Hw2\hw2\handout\data\’image00111.jpg’’)matlab现在去给的路径找’image00111.jpg’而不是image00111.jpg,因此才会出现错误。解决方法是这样的,一开始想通过字符串的删除去掉两个单引号的,但是发现这样做非常麻烦,而且没有必要。因为imread还有第二种写法,

imread(['路径名',文件名]);


 

用这种写法即可解决问题,我是这么写读入语句的


 

imread(['D:\First Semester\ComputerVision\Homework\Hw2\hw2\handout\data\',train.files{1}]);


 

这样程序就可以顺利的从指定路径,利用结构体指针来读入需要的图片了。


 

最后是多图的导入工作,因为需要读入的图片都是彩色的(3D),本来想用4维数组来读,但是因为图片维度都不统一,因此最后还是决定用方便的细胞矩阵来读。细胞矩阵的好处就是可以不受维度限制,甚至不受细胞类型的限制存储数据,你可以将结构图,函数,矩阵,浮点数都一起存入细胞矩阵中,而且很方便的就可以拿出来。


 

读取的语句如下所示,首先通过确定files细胞数组的长度来决定储存多图的细胞矩阵的长度,然后进行循环从其他路径读入所有图片进来。


 

l_files=length(train.files);


 

for i=1:l_files


 

imgSource{i}=imread(['D:\FirstSemester\ComputerVision\Homework\Hw2\hw2\handout\data\',train.files{i}]);


 

end


 


 

读完后,imgSource将成为一个1*198的细胞矩阵,它的每一个元素都对应了一张彩色三通道的图片,如图二所示。




最后,我们可以通过 imgSource{} 的形式来选取需要的彩色图像,比如我现在需要显示第 5 张图片,可以用 imshow(imgSource{5}) 语句来实现(图三)。当然,如果你存成的是二维矩阵,那么就是用 imgSource{}{} 来对元素进行索引就好了

以上就是我对批量读图以及细胞矩阵方面的一些认识和想法,有不足之处,还请大家多多指教。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值