RGBの画像は一色のみが含まれているかどうかを確認する方法?
-
21-08-2019 - |
質問
私は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
たぶん、ハッシュを使用して、キーとしてタプルを格納し、それが値として出現回数だ?
所属していません StackOverflow