alpha_lineart / bg_alpha.py
mattyamonaca's picture
first commit
c3b62d3
from PIL import Image, ImageFilter
import numpy as np
def erode(image, iterations=1):
# モルフォロジー操作のためのカーネルを定義
kernel = np.array([[0, 1, 0],
[1, 1, 1],
[0, 1, 0]], dtype=np.uint8)
image_np = np.array(image)
for _ in range(iterations):
eroded_image = np.zeros_like(image_np)
for i in range(1, image_np.shape[0] - 1):
for j in range(1, image_np.shape[1] - 1):
region = image_np[i-1:i+2, j-1:j+2]
eroded_image[i, j] = np.min(region + (1 - kernel) * 255)
image_np = eroded_image
return Image.fromarray(image_np.astype(np.uint8))
def convert_non_white_to_black(image):
# 画像をNumPy配列に変換
image_np = np.array(image)
# 完全に白でないピクセルをすべて黒にする
#image_np[image_np < 250] = 0
image_np[image_np > 200] = 255
# NumPy配列を画像に変換
return Image.fromarray(image_np)
def adjust_transparency(image):
# 画像を読み込み、グレースケールに変換
image.save("tmp.png")
image = image.convert('L')
image = convert_non_white_to_black(image)
image = image.filter(ImageFilter.SMOOTH)
result = Image.new('RGBA', image.size)
for x in range(image.width):
for y in range(image.height):
# グレースケール値を取得
gray = image.getpixel((x, y))
alpha = 255
# 透明度の設定
if gray == 0:
alpha = 0 # 完全に透明
else:
alpha = 255-gray # 完全に不透明
# 新しい画像にピクセルを設定
result.putpixel((x, y), (0, 0, 0, alpha))
return result
def remove_bg(image):
image = adjust_transparency(image)