私は画像内で色を見つけてx、yを返す関数を作った。今私は新しい関数を追加する必要があります。ここでは、与えられたtolerenceで色を見つけることができます。簡単でしょうか?Python - 類似の色を見つける、最良の方法
コード画像の色を見つけ、そしてxを返すように、Y:
def FindColorIn(r,g,b, xmin, xmax, ymin, ymax):
image = ImageGrab.grab()
for x in range(xmin, xmax):
for y in range(ymin,ymax):
px = image.getpixel((x, y))
if px[0] == r and px[1] == g and px[2] == b:
return x, y
def FindColor(r,g,b):
image = ImageGrab.grab()
size = image.size
pos = FindColorIn(r,g,b, 1, size[0], 1, size[1])
return pos
結果:2つの色を比較する通常の方法は、ユークリッド距離にある回答から撮影
、チェビシェフ距離。
私は主にユークリッド距離と複数の異なる色空間を使用することに決めました。 LAB、デルタE(LCH)、XYZ、HSL、およびRGB。私のコードでは、ほとんどの色空間は、その差を計算するために二乗ユークリッド距離を使用します。
たとえば、LAB、RGB、およびXYZでは、単純な2乗eucが使用されます。距離は、トリックを行います。
if ((X-X1)^2 + (Y-Y1)^2 + (Z-Z1)^2) <= (Tol^2) then
...
LCHを、そして両方が円筒形の色合いを持っているようHSLはもう少し複雑ですが、数学のいくつかの作品は、それは二乗のEuClを使用する上でだ、ということ解決します。ここでも。
ほとんどの場合、各チャネルの許容差に「個別のパラメータ」を追加しました(1つのグローバルトレランス、代替の「修飾子」HueTol := Tolerance * hueMod
またはLightTol := Tolerance * LightMod
を使用)。
XYZ(LAB、LCH)の上に作成された色空間は、私のシナリオの多くで最もよく機能するようです。 Tho HSLは、いくつかのケースで非常に良い結果をもたらし、RGBから変換する方がはるかに安く、RGBも素晴らしいですし、私のニーズの大部分を占めています。単純
画像で色が見つからない場合は、何かを返す必要があります。すなわち、エラーコード。 –
どのように耐性を定義していますか? 'r'、' g'、 'b'の区切りは? –
私はジョンと一緒です:何を試しましたか? [コサイン類似度](https://en.wikipedia.org/wiki/Cosine_similarity)を見て、Pythonの実装を探してみてください。 –