1

基本上,我有两个图像。一个由白色和黑色像素组成,黑色像素组成一个单词,另一个图像是我试图将黑色像素粘贴到上面的图像。我已经粘贴了下面的代码,但是我知道“如果像素 [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;
4

2 回答 2

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')
于 2013-10-10T13:33:42.733 回答
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")
于 2013-10-10T13:42:59.590 回答