Python Imaging Library PIL を使用すると、画像のすべてのピクセルが黒か白かをどのように検出できますか?
〜アップデート〜
条件:各ピクセルを繰り返し処理しないでください!
Python Imaging Library PIL を使用すると、画像のすべてのピクセルが黒か白かをどのように検出できますか?
〜アップデート〜
条件:各ピクセルを繰り返し処理しないでください!
if not img.getbbox():
... 画像が完全に黒かどうかをテストします。(画像に黒以外のピクセルがない場合はImage.getbbox()
falseを返します。それ以外の場合は点のタプルを返します。これは true です。)画像が完全に白かどうかをテストするには、まず画像を反転します。None
if not ImageChops.invert(img).getbbox():
も使用できますimg.getextrema()
。これにより、画像内の最高値と最低値がわかります。これを最も簡単に処理するには、最初に画像をグレースケール モードに変換する必要があります (そうしないと、極値が RGB または RGBA タプル、単一のグレースケール値、またはインデックスである可能性があり、それらすべてを処理する必要があります)。
extrema = img.convert("L").getextrema()
if extrema == (0, 0):
# all black
elif extrema == (1, 1):
# all white
後者の方法はおそらく高速ですが、ほとんどのアプリケーションではそうではありません (どちらも非常に高速です)。
黒または白のいずれかをテストする上記の手法の 1 行バージョン:
if sum(img.convert("L").getextrema()) in (0, 2):
# either all black or all white
Kindall の展開: img という画像を次のように表示すると:
extrema = img.convert("L").getextrema()
画像の値の範囲を示します。したがって、真っ黒な画像は (0,0) になり、真っ白な画像は (255,255) になります。だからあなたは見ることができます:
if extrema[0] == extrema[1]:
return("This image is one solid color, so I won't use it")
else:
# do something with the image img
pass
一部のデータからサムネイルを作成していて、それが正しく読み取られていることを確認したいときに役立ちました。
from PIL import Image
img = Image.open("test.png")
clrs = img.getcolors()
clrs
含む[("num of occurences","color"),...]
をチェックするlen(clrs) == 1
ことで、画像に含まれる色が 1 つだけかどうかを確認できます。また、最初のタプルの 2 番目の要素を調べることでclrs
、色を推測できます。
画像に複数の色が含まれている場合、出現回数を考慮することで、ピクセルの 99% が同じ色を共有している場合、ほぼ完全に単色の画像を処理することもできます。