私はPythonとPILを使用しています。RGB画像に1色しか含まれていないかどうかを確認するにはどうすればいいですか?
RGBの画像がありますが、1色(例:#FF0000)または非常に近い色(#FF0000と#FF0001)しか含まれていない人を知りたいと思います。
私はヒストグラムを使用することを考えていましたが、3色のバンドで何かを見つけ出すことは非常に難しいので、もっと巧妙なアルゴリズムを探しています。
アイデア?
ImageStatモジュールが答えです!アロンに感謝します。 私はImageStat.varを使用して分散を取得し、完全に動作します。ここで
はコードの私の作品です:
from PIL import Image, ImageStat
MONOCHROMATIC_MAX_VARIANCE = 0.005
def is_monochromatic_image(src):
v = ImageStat.Stat(Image.open(src)).var
return reduce(lambda x, y: x and y < MONOCHROMATIC_MAX_VARIANCE, v, True)
3次元RGB空間の各ピクセル間のユークリッド距離を理論的には理論上は良いですが、私はそれが数百万ピクセルの画像ではうまくいかないと思っています...(少なくともPythonで) –
なぜユークリッド距離ですか?あなたが望むものに応じて何か他のものを想像することができます。 – SmuK
問題は距離のタイプではなく、アルゴリズムがO(N^2)であるという事実にあります.Nは画像のピクセル数です(N = 10,000,000の場合があります) –