我有一张像这样比例的地图:(数字只是一个例子)
它描述了地图上的单个变量。但是,我无权访问原始数据,并且对图像处理几乎一无所知。我所做的是使用 PIL 获取地图上每个点的像素坐标和 RGB 值。只需使用pix = im.load()
和保存pix[x,y]
每个x,y
. 现在我想用上面的梯度猜测每个点的值。
这种梯度有标准公式吗?训练有素的眼睛看起来很熟悉吗?我已经访问了数学函数数字图书馆的一些例子......但我不确定它是使用色调,rgb高度函数还是其他东西(为了让事情更容易,我也对一些绿色/眉毛/红色视而不见) :)
任何关于如何进行、图书馆、链接或想法的提示都值得赞赏。谢谢!
编辑:
根据回复和 martineau 的建议,我试图捕捉顶部和底部的颜色:
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 用代码转换成的内容: