【问题标题】:How to read multiple images and create a 3D matrix with them?如何读取多个图像并使用它们创建 3D 矩阵?
【发布时间】:2015-10-12 23:05:55
【问题描述】:

我有一堆图片(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)

这段代码运行良好。谢谢你,给我线索!

【问题讨论】:

    标签: python image-processing matrix multidimensional-array concatenation


    【解决方案1】:

    首先,最后一个维度是颜色通道是对的。我假设你想要一个灰度图像,你可以得到:

    data = imread(fname, flatten=1)
    

    来自 imread 文档here

    其次,您的循环问题可能是由几件事引起的。首先,我在您的帖子中的代码中没有看到缩进,因此请确保您实际尝试运行的代码中的循环体上存在缩进。其次,该代码具有“.txt”扩展名。你确定你真的不想要“.bmp”吗?

    【讨论】:

    • 对不起,我在其他帖子中寻找并找到了一些我想要的类似 here。实际上,我试图关注该帖子,但我看不到我们可以在哪里连接。您对标识和扩展名很了解,我只是复制错误。所以谢谢,你帮助我的第一个问题,实际上我使用的是来自 pyplot 的 imread,现在我从接受关键字参数 flatten 的 scipy 更改为 imread。现在,如何读取所有这些 2D 数组(每个图像)并将其连接到 3D 数组中。我需要做一个循环,但是怎么做?
    • 抱歉,我忽略了解决该填充问题。您已转换为字符串并调用 zfill(),这很好,但您也可以使用格式说明符在原位用零填充文件名,例如:“{0:03d}.txt”.format(i+1) .第一个 '0' 是指 format() 的第零个参数,第二个零表示零填充,'3' 告诉它填充到 3 位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2011-02-17
    • 2023-04-04
    • 1970-01-01
    • 2013-11-07
    • 2018-04-24
    相关资源
    最近更新 更多