使用Python中的三个不同库读取图像时,会产生三种不同类型的输出。

7
我正在使用三个不同的库在Python中读取图像:
  1. imageio
  2. PIL.Image
  3. cv2.
每个库读取图像的输出都不同。例如:
  1. 使用 imageio 读取:

    a = imageio.imread('test_img.png')

    输出类型为 uint8,大小为 (500,334,4)

  2. 使用 Image 读取:

    b = Image.open('test_img.png')

    输出类型为 Image,大小为 (334,500)

  3. 使用 cv2 读取:

    c = cv2.imread('test_img.png')

    输出类型为 uint8,大小为 (500,334,3)

为什么我在使用这三个不同的库时,对于相同的图像获取了三种不同的大小呢?请帮助我理解其中的差异。

3
你理解这些数字的含义吗? - user202729
1
所有的尺寸都相同...高度为500,宽度为334。它们可能以不同的方式表示数据...第三个维度是深度,在OpenCV中,例如这意味着通道,默认情况下加载图像时为3(BGR)。 - api55
是的,我明白在这些情况下我正在获取图像的高度和宽度,但是在imageio的情况下通道数为4,在Opencv的情况下为3。这就是让我感到困惑的原因。 - PURNENDU MISHRA
1
我不太明白你在问什么:你正在使用三个不同的库,所以当然不能期望这三个库都给出相同的输出。你应该查阅每个库的文档,了解每个值的含义。 - poke
@poke 我试图读取一个索引图像,但不确定哪个库适合。所以我尝试了三个不同的库,它们给出了相同索引图像的三种不同结果,并显示了不同的图像形状。这就是我的困惑原因。此外,我之前对 alpha 通道没有任何了解。 - PURNENDU MISHRA
1个回答

11

从imageio和OpenCV返回的是图像的三个属性:高度、宽度和通道数(或深度)。对于标准的BGR图像,你只有3个通道,这就是为什么你会在OpenCV中看到3.

对于imageio来说,它可能读取了第四个通道,通常是alpha通道,表示图像的透明度,并经常出现在PNG图像中。

如果你想在OpenCV中获取第四个通道,则需要使用以下代码:

Mat image = imread("image.png", IMREAD_UNCHANGED);

这将为您提供第四个频道


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接