【问题标题】:Save 3D array into a stack of 2D images in Python在 Python 中将 3D 数组保存到一堆 2D 图像中
【发布时间】:2019-03-18 19:45:35
【问题描述】:

我制作了一个由数字(0~4)组成的 3D 数组。我想要的是将 3D 数组保存为一堆 2D 图像(如果可能,保存 *.tiff 文件)。我该怎么办?

import numpy as np

a = np.random.randint(0,5, size=(100,100,100))
a = a.astype('int8')

【问题讨论】:

    标签: python arrays numpy save


    【解决方案1】:

    其实我做到了。这是我的代码。 使用此代码,我不需要堆叠一系列 2D 图像(数组)。 制作一个 3D 数组,然后保存。这正是我为此所做的。

    import numpy as np
    from skimage.external import tifffile as tif
    
    a = np.random.randint(0,5, size=(100,100,100))
    a = a.astype('int8')
    tif.imsave('a.tif', a, bigtiff=True)
    

    【讨论】:

      【解决方案2】:

      这应该可行。我还没有测试过它,但是我已经使用这种方法将彩色图像分成了 RGB 切片,并且它应该在这里以几乎相同的方式工作,假设您不想先对这些像素值做任何事情。 (它们将非常接近图像中的相同颜色)。

      import imageio
      import numpy as np
      
      a = np.random.randint(0,5, size=(100,100,100))
      a = a.astype('int8')
      for i in range(100):
          newimage = a[:, :, i]
          imageio.imwrite("path/to/image%d.tiff" %i, newimage)
      

      【讨论】:

        【解决方案3】:

        “堆栈”到底是什么意思?当您将 tiff 称为输出格式时,我假设您希望您的数据在一个文件中作为多帧 tiff。
        这可以通过imageiomimwrite() 函数轻松完成:

        # import numpy as np
        # a = np.random.randint(0,5, size=(100,100,100))
        # a = a.astype('int8')
        
        import imageio
        imageio.mimwrite("image.tiff", a)
        

        请注意,此函数依赖于将多个帧的计数器作为第一个参数,然后是 x 和 y。另见其documentation

        但是,如果我错了,并且您想要有 n 个(例如 100 个)单独的 tif 文件,您也可以在循环中使用普通的 imwrite() 函数:

        n = len(a)
        for i in range(n):
            imageio.imwrite(f'image_{i:03}.tiff', a[i])
        

        【讨论】:

          猜你喜欢
          • 2020-06-04
          • 2012-12-31
          • 2018-09-08
          • 1970-01-01
          • 2020-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多