このような縮尺の地図があります: (数字は単なる例です)
これは、マップ上の単一の変数を表します。しかし、私は元のデータにアクセスできず、画像処理についてほとんど何も知りません。私が行ったことは、マップ上の各ポイントのピクセル座標と RGB 値を取得するために PIL を使用することです。単純にそれぞれを使用pix = im.load()
して保存pix[x,y]
しますx,y
。ここで、上記のグラデーションを使用して各ポイントの値を推測したいと思います。
そのような勾配の標準式はありますか? 訓練された目には非常によく似ていますか?いくつかの例については、Digital Library of Mathematical Functionsにアクセスしました...しかし、それが色相、rgb 高さ関数、または他の何かを使用しているかどうかはわかりません (物事を簡単にするために、私はいくつかの緑/眉/赤にも色盲です) ) :)
進め方、ライブラリ、リンク、またはアイデアに関するヒントをいただければ幸いです。ありがとうございました!
編集:
返信とマルティノーの提案に従って、上部と下部の色をキャッチしようとしました:
def rgb2hls(colotup):
'''converts 225 based RGB to 360 based HLS
`input`: (222,98,32) tuple'''
dec_rgb = [x/255.0 for x in colotup] # use decimal 0.0 - 1.0 notation for RGB
hsl_col = colorsys.rgb_to_hls(dec_rgb[0], dec_rgb[1], dec_rgb[2])
# PIL uses hsl(360,x%,y%) notation and throws errors on float, so I use int
return (int(hsl_col[0]*360), int(hsl_col[1]*100), int(hsl_col[2]*100))
def pil_hsl_string(hsltup):
'''returns a string PIL can us as HSL color
from a tuple (x,y,z) -> "hsl(x,y%,z%)"'''
return 'hsl(%s,%s%%,%s%%)' % (hsltup[0], hsltup[1], hsltup[2])
BottomRed = (222,98,32) # taken with gimp
TopBlue = (65, 24, 213)
hue_red = pil_hsl_string(rgb2hls(BottomRed))
hue_blue = pil_hsl_string(rgb2hls(TopBlue))
ただし、結果はかなり異なります... rgb_to_hls 関数を使用して値を抽出することについて心配しています。それとも私は何か非常に悪いことをしていますか?コードで color が変換されるものは次のとおりです。