Python Imaging Library-将一种像素合并到另一个图像中

时间:2013-10-10 06:24:02

标签: python python-imaging-library

基本上,我有两张图片。一个由白色和黑色像素组成,黑色像素组成一个单词,另一个图像是我试图将黑色像素粘贴在上面。我已粘贴下面的代码,但是我知道“如果像素[x,y] ==(0,0,0):'是一个元组而不是一个指标,那么我就是一个问题不知道如何用其他方法来寻找黑色像素。

所以基本上我需要找到并记住黑色像素的位置,以便我可以将它们粘贴到第一个图像上。非常感谢任何帮助!

image_one = Image.open (image_one)
image_two = Image.open (image_two)

pixels = list(image_two.getdata())

for y in xrange(image_two.size[1]):
    for x in xrange(image_two.size[0]):
        if pixels[x,y] == (0, 0, 0):
            pixels = black_pixels
            black_pixels.append()

image = Image.open (image_one);

image_one.putdata(pixels)

image.save(image_one+ "_X.bmp")

del image_one, image_two;

2 个答案:

答案 0 :(得分:0)

你快到了。我对PIL类并不太熟悉,但是不要调用getdata方法,而是直接在图像对象上使用getpixel,并直接将结果设置为输出图像。这消除了存储要覆盖的像素集的需要。但是,除了您在此处列出的情况之外,可能存在需要这种方法的情况。我创建了一个随机图像,然后将各种像素设置为黑色。对于这个测试,我使用了不同的条件 - 如果图像的R通道大于50.您可以将其注释掉并使用另一个测试,测试元组(R,G,B)==(0,0, 0)哪个会正常工作。

imagea = PIL.Image.open('temp.png')
imageb = PIL.Image.open('temp.png')

for y in xrange(imagea.size[1]):
  for x in xrange(imagea.size[0]):
    currentPixel = imagea.getpixel((x,y))

    if currentPixel[0] >  50:
    #if currentPixel ==(0,0,0):
      #this is a black pixel, you can directly modify image 2 now
      imageb.putpixel((x,y),(0,0,0))

imageb.save('outputfile.png')

答案 1 :(得分:0)

另一种方法是将两个图像相乘。二进制图像中任何黑色的像素在结果中将为黑色(乘以零),并且二进制图像中任何白色的像素将与结果中的另一个图像保持不变(乘以1)。

PIL可以做到这一点,

from PIL import Image, ImageChops

image_one = Image.open("image_one.bmp")
image_two = Image.open("image_two.bmp")

out = ImageChops.multiply(image_one, image_two)
out.save("output.bmp")