質問

私はPythonとPILを使用しています。

私は、RGBの画像を持っていると私は一色だけ(例えばたとえば#FF0000)またはいくつかの非常に近い色(#1 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)

他のヒント

まず、あなたは、2つの色の間の距離を定義する必要があります。 そして、あなたは自分の色に、それまでの距離が十分に小さいことを画素ごとに検証する必要があります。

ここであなたが利用することができ少し抜粋です。


import Image

im = Image.open("path_to_image")
width,height = im.size

for w in range(0,width):
  for h in range(0,height):
     # this will hold the value of all the channels
     color_tuple = im.getpixel((w,h))
     # do something with the colors here

たぶん、ハッシュを使用して、キーとしてタプルを格納し、それが値として出現回数だ?

scroll top