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

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

  1. имиджио
  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)

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


person PURNENDU MISHRA    schedule 17.01.2018    source источник
comment
Вы понимаете, что означают цифры?   -  person user202729    schedule 17.01.2018
comment
все размеры одинаковы ... высота 500, ширина 334. Они могут представлять данные по-разному ... 3-е измерение - это глубина в OpenCV, например, это означает каналы, которые по умолчанию 3 (BGR) при загрузке картинка   -  person api55    schedule 17.01.2018
comment
Да, я понимаю, что я получаю высоту и ширину изображения в каждом из этих случаев, но количество каналов в случае imageio равно 4, тогда как в случае Opencv - 3. Это причина для меня путаницы.   -  person PURNENDU MISHRA    schedule 19.01.2018
comment
Я не совсем понимаю, о чем вы спрашиваете: вы используете три разных библиотеки, поэтому, конечно, вы не можете ожидать, что все три библиотеки дадут вам одинаковый результат. Вы должны посмотреть в документации каждой библиотеки, что означает каждое значение.   -  person poke    schedule 03.02.2018
comment
@poke Я пытался прочитать проиндексированное изображение и не знал, какая библиотека подойдет. Итак, я попробовал три разные библиотеки, которые дали мне три разных результата для одного и того же индексированного изображения, а также показали разные формы изображений. Это было причиной моего замешательства. Также раньше я ничего не знал об альфа-канале.   -  person PURNENDU MISHRA    schedule 07.02.2018


Ответы (1)


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

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

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

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

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

person GPPK    schedule 17.01.2018