Есть ли простой способ проанализировать прозрачное изображение PNG с помощью cv2? - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь загрузить прозрачное изображение (только без фона) с CV2, но когда я пытаюсь показать изображение, я получаю черный фон. Есть ли возможный (и простой) способ загрузить прозрачное изображение в формате PNG? Ввод:

The result I get Результат: The result I get

Это результат, который я получаю: даже если я пытаюсь это код:

import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
cv2.imshow('test',im)

Я получаю результат с черным фоном

Ответы [ 2 ]

0 голосов
/ 20 января 2020

cv.loadImage () для MultiCameraCalibration. Используйте cv.imread () для отдельных изображений. Чтобы получить прозрачность, вы должны использовать флаг cv.IMREAD_UNCHANGED

Вот как это сделать в Python / OpenCV. Обратите внимание, что с cv.imshow вы не увидите прозрачность. Это будет черным. Для дальнейшего анализа вы должны извлечь альфа-канал в качестве маски и использовать его для всего, что вы хотите сделать, чтобы ограничить обработку ботинком, а не фоном вокруг него.

import cv2

# load image with alpha channel
img = cv2.imread('shoe.png', cv2.IMREAD_UNCHANGED)

# get mask from alpha channel
mask = img[:,:,3]

# view images
# NOTE: imshow does not show transparency. It will be black there.
cv2.imshow('img', img)
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

# Saving the image does contain transparency as can be seen when viewed with some external viewer.
cv2.imwrite('shoe_copy.png', img)
0 голосов
/ 20 января 2020

Загружаемое изображение имеет четыре канала. Проверьте размер массива. Канал 4 является альфа-каналом, и вы можете сохранить изображение обратно с помощью альфа-канала. Вы также можете сгенерировать маску из альфа-канала (в OpenCV маски являются двоичными со значениями 0 и 255 соответственно).

Большинство операций OpenCV работают с 4-канальными изображениями, но не обрабатывают альфа канал специальный или получить любую информацию из него.

...