首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PIL中改变像素颜色值

在PIL中改变像素颜色值
EN

Stack Overflow用户
提问于 2016-04-07 06:42:13
回答 3查看 97.7K关注 0票数 33

我需要更改python中图像的像素颜色。除了像素值(255,0,0)红色外,我需要将每个像素颜色值更改为黑色(0,0,0)。我尝试了下面的代码,但没有帮助。

代码语言:javascript
运行
复制
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]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-07 07:05:59

参见此wikibook:Pixels

修改代码以适应您的问题:

代码语言:javascript
运行
复制
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)
票数 45
EN

Stack Overflow用户

发布于 2016-04-07 07:25:58

下面是我用PIL来做你想做的事情的方法:

代码语言:javascript
运行
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2018-11-11 12:50:01

把这个问题带到一个极端的水平,下面是如何随机改变PIL中的通道(忽略任何0,我认为这是背景)。

代码语言:javascript
运行
复制
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()

享受吧!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36468530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档