更改 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)
这里是我使用 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)
把问题带到一个极端的水平,这里是如何随机改变 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()
尽情享受吧!
您可以使用 img.putpixel
:
im.putpixel((x, y), (255, 0, 0))
我需要更改 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)
这里是我使用 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)
把问题带到一个极端的水平,这里是如何随机改变 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()
尽情享受吧!
您可以使用 img.putpixel
:
im.putpixel((x, y), (255, 0, 0))