【问题标题】:How to convert a 1 channel image into a 3 channel with PIL?如何使用 PIL 将 1 通道图像转换为 3 通道?
【发布时间】:2018-10-19 00:02:04
【问题描述】:

我有一张只有一个频道的图像。我想复制这个通道,这样我就可以获得具有相同通道的新图像,只需复制三遍。基本上,制作一个准 RBG 图像。

我看到了一些关于如何使用 OpenCV 执行此操作的信息,但在 PIL 中没有。在 Numpy 中看起来很简单,但 PIL 再次不同。我不想养成一直从一个图书馆跳到另一个图书馆的习惯。

【问题讨论】:

  • 切换到使用Imageio - 它使 Numpy ndarrays。 scipy.ndimage.imread 的文档甚至状态切换到 Imageio。
  • 呃...然后,我会在 Imageio 中遇到一些需要切换到 OpenCV 的东西,然后,我会在 OpenCV 中遇到一些需要切换到 PIL 的东西。 ...然后它又开始了...我因计算机视觉旋转木马而感到胃痛!
  • 如果您可以将数据放入 ndarray 中,那么您无能为力。如果像 scipy 这样的其他库可以更轻松地完成这些事情......您是否查看了 PIL 的文档并找到任何东西?您使用的是 PIL 还是 Pillow?
  • 单独使用 numpy 即可。您可以使用 PIL 方法转换为 numpy 数组,然后将单个数组广播到 3 个通道,然后再转换回 PIL Image 对象。
  • 这在文档中回答得非常清楚。

标签: python python-imaging-library channels


【解决方案1】:

这是一种无需过多查看文档的方法..

假图片:

im = Image.new('P', (16,4), 127)

获取单波段图像的(像素)大小;创建一个新的相同大小的 3 波段图像;使用zip 从原始创建像素元组;将其放入新图像中..

w, h = im.size
ima = Image.new('RGB', (w,h))
data = zip(im.getdata(), im.getdata(), im.getdata())
ima.putdata(list(data))

甚至可能

new = im.convert(mode='RGB')

【讨论】:

    【解决方案2】:

    只需使用:

    image = Image.open(image_info.path).convert("RGB")
    

    可以将 1 通道和 4 通道转换为 3 通道

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 2013-01-25
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2020-05-07
      相关资源
      最近更新 更多