python - 如何读取多个图像并用它们创建 3D 矩阵?

标签 python image-processing matrix multidimensional-array concatenation

我有一堆图像(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/

相关文章:

python - 在棋盘 OpenCV 中检测正方形

algorithm - 从白色引用中获取白平衡 (K)

python - 在 OpenCV 中从带有孔的掩模侧面腐 eclipse x 像素

从 R 中的矩阵中删除行名列表

python - Tensorflow 中的 CNN - 损失保持不变

python - 如何从 django templatetag 访问 python 列表?

python - 具有映射物理量的误差条和颜色的散点图

python - Tornado 或 Django 与 CGI 一起工作?

matlab - 如何合并/交错 2 个矩阵?

c - 使用 OpenMP 进行矩阵相乘比序列化方式花费更多时间