如何使用 PIL 将 1 通道图像转换为 3 通道?

Posted

技术标签:

【中文标题】如何使用 PIL 将 1 通道图像转换为 3 通道?【英文标题】:How to convert a 1 channel image into a 3 channel with PIL? 【发布时间】: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 对象。 这在文档中回答得非常清楚。 【参考方案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 通道

【讨论】:

以上是关于如何使用 PIL 将 1 通道图像转换为 3 通道?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV:将 3 通道图像转换为 4 通道

将通道最后转换为通道第一图像

Python PIL 完全删除每个 alpha 通道

如何使用任意数量的通道创建图像? (蟒蛇)

PIL与CV2读取图像通道(波段)顺序区别(显示效果和数组展示)

python库skimage 将针对灰度图像的滤波器用于RGB图像 逐通道滤波;转换为HSV图像滤波