0

私はPythonを初めて使用するので、次の方向に向けたいと思います。PILを使用しています。かなりの調査を行いましたが、私はまだ立ち往生しています!

各ピクセルのRGBを0,0から開始し、各行に沿って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)]ii[0]

于 2012-10-24T14:29:55.763 に答える