#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 действительно, это была проблема, спасибо!