簡體   English   中英

如何刪除圖像的背景並使其透明?

[英]How to remove an image's background and make it transparent?

我使用的代碼是這樣的:

from PIL import Image
import os

path = 'C:/Users/User/Desktop/GF_BSIF/temp'
newData = []

for image in os.listdir(path):
    img = Image.open(path+'/'+image)
    img = img.convert("RGBA")
    datas = img.getdata()

    for item in datas:
        if item[0] == 255 and item[1] == 255 and item[2] == 255:
            newData.append((255, 255, 255, 0))
        else:
            if item[0] > 150:
                newData.append((0, 0, 0, 255))
            else:
                newData.append(item)
                print(item)

img.putdata(newData)
img.save('C:/Users/User/Desktop/GF_BSIF/temp'+'/'+"open_science_logo_transparent.png", "PNG")

原來的:

在此處輸入圖像描述

結果:

在此處輸入圖像描述

結果並不完全使背景透明。

如何改進代碼並使黑色背景變為透明?

編輯:

from PIL import Image
import matplotlib.pyplot as plt
import os
import shutil
path = 'C:/Users/User/Desktop/GF_BSIF/temp'
out_put = 'C:/Users/User/Desktop/data science/cropped'
newData = []


for image in os.listdir(path):
    img = Image.open(path+'/'+image)
    img = img.convert("RGBA")
    datas = img.getdata()
    
    for item in datas:
        if all(i == 0 for i in datas[0:3]):
            newData.append((0, 0, 0, 0))
        else:
            etcetcetc
img.putdata(newData)
img.save('C:/Users/User/Desktop/GF_BSIF/temp'+'/'+"open_science_logo_transparent.png", "PNG")   

@NotActuallyErik

它顯示一個錯誤


TypeError Traceback(最近一次調用最后一次)

in 14 15 for item in datas: ---> 16 if all(i == 0 for i in datas[0:3]): 17 newData.append((0, 0, 0, 0)) 18 else:

類型錯誤:序列索引必須是 integer,而不是“切片”。

如何使它正確?

您的代碼告訴 PIL 刪除用黑色像素替換每個白色像素: [255,255,255,0] -> [0,0,0,255]這就是為什么您的黑色背景仍然存在,而只有全白點被刪除。 你需要做相反的事情來去除背景,即[0,0,0,255] -> [0,0,0,0]

這可能有效

for item in datas:
    if all(i == 0 for i in datas[0:3]):
        newData.append((0, 0, 0, 0))
    else:
        etcetcetc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM