我有一堆图像(300 张 400 X 400 像素的图像),文件名如下:
- 001.bmp
- 002.bmp
- 003.bmp
- ...
首先,我尝试阅读其中一篇,例如使用 imread
我得到一个 (400L, 400L, 3L) 矩阵,问题是 3L (我认为是 RBG 格式),所以这里的问题是:我如何读取它们并得到 (400L ,400L,1L)矩阵,我需要处理它们?
其次,我尝试使用如下循环读取 300 张图像:
data = np.zeros((400,400,300))
for i in range(300):
data[:,:,i] = imread('{0}.bmp'.format(i))
但它不起作用,很可能我的代码是错误的。实际上这样做,我想将每个(300)图像数据(400 X 400)连接成(400 X 400 X 300)的矩阵。
尝试使用时:
data[:,:,i] = imread('{0}.bmp'.format(i))
搜索 '1.bmp'
而不是 '001.bmp'
,但由于列表从 000 到 299,我遇到了问题,并且我无法编写 '00{0}.bmp'.format(i)
来完成文件名,因为对于两位数和三位数字,我得到 '0012.bmp'
或'00123.bmp'
好吧,下类后,我必须这样做
arrays = []
for number in range(0, 299):
numstr = str(number).zfill(3)
fname = numstr + '.bmp'
a = imread(fname, flatten=1)
arrays.append(a)
data = np.array(arrays)
这段代码工作得很好。谢谢你给我线索!
最佳答案
首先,你说得对,最后一个维度是颜色 channel 。我假设您想要一个灰度图像,您可以通过以下方式获得:
data = imread(fname, flatten=1)
来自未读文档 here .
其次,循环问题可能是由于以下几个原因造成的。首先,我在您帖子的代码中没有看到缩进,因此请确保您实际尝试运行的代码中的循环体上有缩进。其次,该代码具有“.txt”扩展名。您确定您实际上并不想要“.bmp”吗?
关于python - 如何读取多个图像并用它们创建 3D 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31573872/