私はPythonを初めて使用するので、次の方向に向けたいと思います。PILを使用しています。かなりの調査を行いましたが、私はまだ立ち往生しています!
各ピクセルのRGBを0,0から開始し、各行に沿ってy座標まで下がる必要があります。それはbmpであり、白黒のみですが、Pythonで10,10,10から0,0,0の間のピクセルのみを印刷する必要があります。誰かが私にいくつかの知恵を提供できますか?
私はPythonを初めて使用するので、次の方向に向けたいと思います。PILを使用しています。かなりの調査を行いましたが、私はまだ立ち往生しています!
各ピクセルのRGBを0,0から開始し、各行に沿ってy座標まで下がる必要があります。それはbmpであり、白黒のみですが、Pythonで10,10,10から0,0,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]