Три разных типа вывода при чтении изображения с тремя разными библиотеками в Python

Я читаю изображение в Python с тремя различными библиотеками

  1. ImageIO
  2. PIL.Image
  3. CV2.

Вывод, который я получаю при чтении изображения с каждой из этих библиотек, отличается. Например

  1. При чтении с imageio

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

    Выход имеет тип - uint8 и размер (500,334,4)

  2. используя изображение

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

    тип - изображение, размер (334 500)

  3. используя cv2

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

    type - uint8, размер (500,334,3)

Почему я получаю три разных размера для одного изображения при использовании трех разных библиотек? Пожалуйста, помогите мне понять разницу.

1 ответ

То, что вы получаете как от imageio, так и от OpenCV, - это три свойства изображения: высота, ширина и каналы (или глубина). Для стандартных изображений BGR у вас есть только 3 канала, поэтому вы видите 3 для OpenCV

Для imageio вполне вероятно, что он читает четвертый канал, обычно альфа, который представляет прозрачность изображения и часто встречается в изображениях PNG.

Если вам нужен четвертый канал с OpenCV, вам нужно использовать следующий код:

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

Что даст вам четвертый канал

Другие вопросы по тегам