簡體   English   中英

如何在Python中設置像素的alpha值

[英]How to set alpha value of a pixel in Python

我正在嘗試編輯圖像 ,使所有白色像素都轉換為透明像素(具有0 alpha值)。 基本上我想擺脫背景。

我知道圖像文件的im.putpixel方法,但是根據我的實驗,這不允許我設置alpha值。 我嘗試了以下方法:

for x in range(90):
    for y in range(80, 90):
        im.putpixel((x, y), (0, 0, 0, 0))

只是在指定區域出現黑度,而不是透明度。 有沒有辦法改變像素的alpha值? 如果是這樣,怎么樣?

聽起來你正在使用python圖像庫( PIL )。

如果是這樣,你可以這樣做:

from PIL import Image
image = Image.open("<path to image file>").convert('RGBA')
pixeldata = list(image.getdata())

for i,pixel in enumerate(pixeldata):
    if pixel[:3] == (255,255,255):
        pixeldata[i] = (255,255,255,0)

image.putdata(pixeldata)
image.save("output.png")

這應該產生這樣的東西:

在此輸入圖像描述在此輸入圖像描述

當然,這可能不是你想要的。 您可以做的一件事是當顏色接近白色而不是完全白色時將像素設置為透明。 你可以定義一個類似的函數

def almostEquals(a,b,thres=5):
    return all(abs(a[i]-b[i])<thres for i in range(len(a)))

並用以下代碼替換顏色檢查行:

if almostEquals(pixel[:3], (255,255,255):

得到這樣的東西

在此輸入圖像描述在此輸入圖像描述

還有一些暈圈/邊界文物但更好。

在您的情況下,使用簡單的黑白圖像,您可能只想根據像素的白色設置alpha(我經常在photoshop中這樣做)。 您可以使用3種顏色通道中的一種,甚至是平均值。 就像是:

for i,pixel in enumerate(pixeldata):
    avg = int(sum(pixel[:3])/3.0)
    pixeldata[i] = (pixel[0],pixel[1],pixel[2],255-avg)

會給你一個像這樣的結果:

在此輸入圖像描述在此輸入圖像描述

仍然是一個小暈,因為我們仍然只是改變alpha值,但更好。 要解決這個問題,您可以執行類似將所有像素設置為黑色的操作,而不僅僅是修改alpha。

無論如何,一個簡單問題的答案很長,但希望這有幫助。

嘗試這個:

for x in range(90):
    for y in range(80, 90):
        pixels[x, y] = (0, 0, 0, 0)

暫無
暫無

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

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