0

我是 python 新手,想指出下一个方向。我正在使用 PIL。做了相当多的研究,我仍然卡住了!

我需要从 0,0 开始获取每个像素的 rgb,并沿着每行一直向下 y 坐标。它是一个 bmp,只有黑白,但我只希望 python 打印介于 10、10、10 和 0、0、0 之间的像素。有人可以给我一些智慧吗?

4

1 回答 1

0

如果您确定r==g==b对于所有像素,那么这应该有效:

from PIL import Image

im = Image.open("g.bmp")       # The input image. Should be greyscale
out = open("out.txt", "wb")    # The output.

data = im.getdata()            # This will create a generator that yields
                               # the value of the rbg values consecutively. If
                               # g.bmp is a 2x2 image of four rgb(12, 12, 12) pixels, 
                               # list(data) should be 
                               # [(12,12,12), (12,12,12), (12,12,12), (12,12,12)]

for i in data:                   # Here we iterate through the pixels.
    if i[0] < 10:                # If r==b==g, we only really 
                                 # need one pixel (i[0] or "r")

        out.write(str(i[0])+" ") # if the pixel is valid, we'll write the value. So for
                                 # rgb(4, 4, 4), we'll output the string "4"
    else:
        out.write("X ")          # Otherwise, it does not meet the requirements, so
                                 # we'll output "X"

如果由于某种原因不能保证,r==g==b请根据需要调整条件。例如,如果您想要平均10,您可以将条件更改为类似

if sum(i) <= 30: # Equivalent to sum(i)/float(len(i)) <= 10 if we know the length is 3

另请注意,对于灰度格式的文件(与彩色文件格式的灰度图像相反)im.getdata()将仅将灰度级作为单个值返回。因此,对于 的 2x2 图像rgb(15, 15, 15)list(data)将输出,[4, 4, 4, 4]而不是[(4, 4, 4), (4, 4, 4), (4, 4, 4), (4, 4, 4)]。在这种情况下,在分析时,只参考i而不是i[0]

于 2012-10-24T14:29:55.763 回答