簡體   English   中英

更改 PIL 中的像素顏色值

[英]Changing pixel color value in PIL

我需要在 python 中更改圖像的像素顏色。 除了像素值 (255, 0, 0) 紅色我需要將每個像素顏色值更改為黑色 (0, 0, 0)。 我嘗試了以下代碼,但沒有幫助。

from PIL import Image
im = Image.open('A:\ex1.jpg')
for pixel in im.getdata():
    if pixel == (255,0,0):
        print "Red coloured pixel"
    else:
        pixel = [0, 0, 0]

請參閱此維基書: https : //en.wikibooks.org/wiki/Python_Imaging_Library/Editing_Pixels

修改該代碼以適應您的問題:

pixels = img.load() # create the pixel map

for i in range(img.size[0]): # for every pixel:
    for j in range(img.size[1]):
        if pixels[i,j] != (255, 0, 0):
            # change to black if not red
            pixels[i,j] = (0, 0 ,0)

你可以使用img.putpixel

im.putpixel((x, y), (255, 0, 0))

將問題帶到一個極端的水平,這里是如何隨機更改 PIL 中的通道(忽略任何 0,我認為是背景)

rr, gg, bb = in_img.split()
rr = rr.point(lambda p: 0 if p==0 else np.random.randint(256) )
gg = gg.point(lambda p: 0 if p==0 else np.random.randint(256) )
bb = bb.point(lambda p: 0 if p==0 else np.random.randint(256) )
out_img = Image.merge("RGB", (rr, gg, bb))
out_img.getextrema()
out_img.show()

享受!

這是我使用 PIL 做你想做的事情的方式:

from PIL import Image

imagePath = 'A:\ex1.jpg'
newImagePath = 'A:\ex2.jpg'
im = Image.open(imagePath)

def redOrBlack (im):
    newimdata = []
    redcolor = (255,0,0)
    blackcolor = (0,0,0)
    for color in im.getdata():
        if color == redcolor:
            newimdata.append( redcolor )
        else:
            newimdata.append( blackcolor )
    newim = Image.new(im.mode,im.size)
    newim.putdata(newimdata)
    return newim

redOrBlack(im).save(newImagePath)

暫無
暫無

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

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