Обновлено снова
Вы абсолютно можете создать альфа-канал и добавить его к своему изображению.Это может выглядеть так:
# Split image into its three constituent channels, R, G and B
R, G, B = cv2.split(image)
# Make a same-shape alpha channel, initially opaque (255)
alpha = np.ones_like(R)*255
# Merge R, G, B and alpha into a 4-channel image
imgwithalpha = cv2.merge((R, G, B, alpha))
Единственная проблема заключается в том, что OpenCV'S imshow()
игнорирует альфа, а imwrite()
учитывает альфу и сохраняет его на диск.Поэтому я бы нарисовал маску красным, как вы (чтобы пользователь мог ее видеть), но в то же время сохранил маску в черно-белом.Затем, в конце, объедините черно-белый в альфа-канал, как показано выше - черный, где вы хотите прозрачность, и белый, где вы хотите прозрачность.
Обновленный ответ
Итак, похоже, ваш код несколько отличается от примера кода OpenCV, и вы фактически загружаете другое изображение, а не черное, которое они используют.Неважно, сделайте черное изображение того же размера, что и ваша птица (используя numpy zeros_like(bird)
. Затем, когда вы рисуете на птице, нарисуйте этот же белый круг на черной копии. В конце используйте floodFill()
с (0,0) в качестве семени, чтобы заполнить всю область за пределами птицы на черном изображении и сохранить его, как показано ниже.
Оригинальный ответ
Я не уверенЯ понимаю ваш вопрос, поэтому я отвечу на то, что, по вашему мнению, вы спрашиваете, и посмотрим, приведет ли это к правильному решению.
Код, на который вы ссылаетесь, создает пустой черный холст 512x512, например:
img = np.zeros((512,512,3), np.uint8)
Затем каждый раз, когда вы щелкаете мышью, на нем рисуются круги. Поэтому вам просто нужно сохранить это изображение перед выходом. Итак, добавьте его в качестве последней строки:
cv2.imwrite('mask.png',img)