Как сделать прозрачную маску изображения
У меня есть изображение кота, мне надо сделать маску изображения прозрачной

пробовал делать с помошью open-cv но в данном случає белая часть изображения не прозрачная а белая , как можно сделать белую часть прозрачной
код:
import numpy as np
import cv2
circle = np.zeros((300, 300), dtype = "uint8")
circle = cv2.circle(circle, (150, 150), 150, 255, -1)
img = cv2.imread('cat.png')
img = cv2.resize(img,(300,300),cv2.INTER_AREA)
bitwiseAnd = cv2.bitwise_and(img,img,mask=circle)
bitwiseAnd[circle==0] = 255
cv2.imshow("Masked image",bitwiseAnd)
cv2.waitKey(0)
Ответы (2 шт):
Вот небольшой пример, главное тут формула определяющая выходит ли пиксель за заданную окружность (x - r)**2 +(y - r)**2 > r**2, если > — выходит, там где идет вычетание радиуса происходит смещение круга от левого верхнего угла в центр изображения, предполагается что изображение квадратное:
from PIL import Image
with Image.open("cat.png") as im:
r = im.size[0] / 2 # радиус и соответсвенно координаты центра
for y in range(im.size[0]):
for x in range(im.size[1]):
if (x - r)**2 +(y - r)**2 > r**2:
im.putpixel((x,y), (255,0,0, 0))
im.save('rounded_cat.png')
При желании этот алгоритм можно доработать чтобы контур смотрелся сглаженнее, добавив полупрозрачности на границе с прозрачными пикселями
я нашел еще одно решение вопроса
from PIL import Image, ImageDraw
cat = Image.open('cat.png').resize(size=(512,512), resample=1)
im_a = Image.new("L", cat.size, 0)
ImageDraw.Draw(im_a).ellipse((0, 0, 512, 512), fill=255)
im_rgba = cat.copy()
im_rgba.putalpha(im_a)
im_rgba.crop((0, 0, 512, 512)).save('catcircle.png')
