找回密码
 注册
Simdroid-非首页
查看: 261|回复: 12

matlab循环读取图片请教

[复制链接]
发表于 2009-3-5 19:12:41 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
本帖最后由 ljelly 于 2009-3-11 12:37 编辑

怎么从一个文件夹中自动地连续读取多幅图片呢?
imread只能读取一幅,并且imread读取的图片是人为地赋值给的。
曾经设想用for循环如下:
for i=0:9
I = imread('i.jpg');
figure;
imshow(I);
end
但是运行后发现,imread把i.jpg当成图像名了,根本达不到让i从0到9的变化。
哪位大虾有好的办法,能告诉我吗?
先谢谢了!!!
 楼主| 发表于 2009-3-6 09:21:08 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
哪位大侠帮忙啊……
我想提取一张图片处理,然后循环这种操作,怎么实现啊?
谢谢啊!
回复 不支持

使用道具 举报

发表于 2009-3-6 09:28:27 | 显示全部楼层 来自 北京朝阳
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-9 10:31:22 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢帮助,谢谢教诲!
回复 不支持

使用道具 举报

发表于 2009-3-9 15:01:54 | 显示全部楼层 来自 重庆沙坪坝区
本帖最后由 风天小畜 于 2009-3-9 15:15 编辑

可能的一种方法:


  1. dList =dir('*.jpg');
  2. %如需其它图片格式支持,可以自己【重载dir()】函数,实现查找所有图片文件的功能,
  3. %如果图片是其它路径,可以用 ["路径" ".扩展名"] 字符串来实现。
  4. k =length(dList);
  5. for i=1:1:k
  6. image_data{i}=imread(dList(i).name);
  7. end

  8. %所有的图片数据,已经保存在了cell 变量 image_data 里面了。

  9. %下面演示如何使用
  10. %每隔一秒钟显示一幅图片
  11. for j=1:1:k
  12. image(image_data{j});
  13. pause(1);
  14. end
复制代码
回复 不支持

使用道具 举报

发表于 2009-3-9 15:13:59 | 显示全部楼层 来自 重庆沙坪坝区
本帖最后由 风天小畜 于 2009-3-9 15:16 编辑

如果图片命名很规范,则直接使用 正则表达式,来给出一个 字符串的cell,而不必 dir()了

如果格式,全部是数字,比如 001.jpg 002.jpg
那么,直接循环加上  num2str() 函数。或者,直接 char () 函数来转换。


---------------------------
----------------------------
---------------------------
孟子:人之患,在好为人师。

也许,LZ的提问方式,存在很多令前辈们不能接受的缺陷,那么LZ好好学习学习那些教诲吧。

师者,所以传道受业解惑也。人非生而知之者,孰能无惑?

对于LZ的提问方式,我是没法子给出教诲的。
不过,LZ的问题本身,我还是可以试着给出一个解答。
回复 不支持

使用道具 举报

发表于 2009-3-9 20:32:35 | 显示全部楼层 来自 新疆乌鲁木齐
三楼给的链接中往下看看就有楼主需要的答案,文章是我写的,其实首发就是在simwe。图片按名称循环读入是我给出的第一个例子。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-13 09:24:47 | 显示全部楼层 来自 黑龙江哈尔滨
接着请教:
我是想提取一张图片,然后对它进行处理,显示所需结果。然后再提取下一张处理,循环这种操作,怎么实现啊?就是我想实时的处理VC程序抓取的一帧一帧视频图片……
试了楼上的意见,发现好像是一次提取了所有图片,然后批处理的,不太满足我的现实条件。
再次谢谢大侠啊!
回复 不支持

使用道具 举报

发表于 2009-3-13 13:27:29 | 显示全部楼层 来自 香港
本帖最后由 ydlcsu 于 2009-3-13 13:30 编辑

吐完血从地上爬起来回复你:
晕掉了,解释得这么清楚还不知道怎么办。
5楼给出的代码里,你把你处理图片的代码放到第一个for循环里不就读一张处理一张了?连打击你的心情都没有了。。
回复 不支持

使用道具 举报

发表于 2009-3-20 14:06:13 | 显示全部楼层 来自 重庆
真是如楼上说的吐血。

你为什么非要,读取一张,处理一张,显示一张;再读取一张,再处理一张,再显示一张?

现在又不是DOS时代的如此紧张的内存

你完全可以,先读取很多图片。再处理一张,显示一张。

即便,你非要固执地一张一张来。
也可以
imread(dList(i).name),不用for。处理完一张,i=i+1;,再imread(dList(i).name)就可以了。


说实在的,这么固执的思想,不要用matlab 了。
C语言够用了,可以goto 来实现,避免你的所谓的批量处理。
而且,你用C语言,不用循环,把for展开,一句一句的重复的代码,还算得上是比拼编译器优化的技术了
回复 不支持

使用道具 举报

发表于 2009-3-20 21:38:16 | 显示全部楼层 来自 内蒙古呼和浩特
学习一下

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-4-27 19:15:47 | 显示全部楼层 来自 英国
学习一下。
回复 不支持

使用道具 举报

发表于 2010-4-28 09:24:27 | 显示全部楼层 来自 山东济南
3楼是对文件名排列,最实用,在load多个文件数据的时候可以用这个
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 13:19 , Processed in 0.051328 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表