Некоторые исходящие изображения загружаются неправильно с помощью OpenCV

#python #c #opencv

#python #c #opencv

Вопрос:

В настоящее время я заменяю библиотеку ImageMagick на OpenCV в своем проекте и столкнулся со странной проблемой при работе с прозрачными изображениями (формат png). Когда я загружаю изображение, которое содержит альфа-канал — изображение выглядит «сломанным», иногда (когда прозрачен только фон) у него просто черный фон, но когда содержимое изображения само по себе прозрачно, тогда оно выглядит так, как на скриншоте. Насколько я пробовал — проблема воспроизводима на C и Python.

Я попытался преобразовать из BGRA в RGBA — проблема все еще существует, но с немного другим цветом в результирующем изображении. Я также попробовал это с несколькими изображениями, которые я нашел в Интернете, поэтому я полагаю, что это не просто одно сломанное изображение, а что-то с OpenCV или то, как я пытаюсь его использовать. Когда я использовал ImageMagick (v7) на C — изображения загружались правильно без таких проблем (но мне все еще нужно заменить его по другим причинам, поэтому придерживаться старой библиотеки не вариант).

Главный вопрос:

Есть ли что-то, что я должен знать, чтобы иметь возможность правильно читать такие изображения, или это просто способ, которым работает OpenCV?

Я использую версии OpenCV 4.4.0 в Python и 4.3.0 в C .

Это код, который я использую в Python:

 import cv2

img = cv2.imread('/home/monkeber/Pictures/trans2.png', cv2.IMREAD_UNCHANGED)

cv2.imshow("image", img)
cv2.waitKey(0) 

resized = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation = cv2.INTER_LINEAR)

cv2.imshow("Resized image", resized)
cv2.waitKey(0) 
  

UPD. Похоже, что та же проблема присутствует в службе Imgur, которая используется в StackOverflow, когда я пытался уменьшить размер изображений в вопросе — у меня был точно такой же эффект на исходное изображение.

Скриншот с проблемой и исходным изображением для воспроизведения: Скриншот
Исходное изображение

Комментарии:

1. Я загрузил ваше 2-е изображение в GIMP на своей стороне и «удалил» альфа-канал. Затем я получаю точно такой же результат, как в вашем правом представлении 1-го изображения (моментальный снимок). У меня сложилось впечатление, что в представлении OpenCV просто не отображается альфа-канал, а только значения RGB. Странный фон, который вы видите, уже присутствует в вашем исходном изображении — просто «подавлен» альфа-значениями.

2. @Scheff действительно, это была проблема, спасибо!