Mas*_*ran 5 python rgb gradient image python-imaging-library
我有一张像这样比例尺的地图:(数字只是一个例子)
它描述了地图上的单个变量。但是,我无法访问原始数据,并且对图像处理几乎一无所知。我所做的是使用 PIL 来获取地图上每个点的像素坐标和 RGB 值。简单地使用
pix = im.load()
和保存pix[x,y]
每个x,y
。现在我想用上面的梯度来猜测每个点的值。
这种梯度有标准公式吗?训练有素的眼睛看起来很熟悉吗?我已经访问了数学函数数字图书馆的一些例子......但我不确定它是否使用了色调、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))
Run Code Online (Sandbox Code Playgroud)
然而,它们的结果却大不相同……这让我担心使用 rgb_to_hls 函数来提取值。还是我做错了什么?这是使用代码将颜色转换为的内容:
有趣的问题..
如果您在 HSL 颜色空间中从 250,85%,85% --> 21,85%,85% 进行顺时针行走,您会得到一个非常接近您所显示的渐变。明显的区别是您的图像表现出相当窄的绿色值带。
因此,如果您有 4 个幻数,那么您可以插值到地图内的任何点。
这些当然是第一个和最后一个颜色,也是第一个和最后一个比例值。这是我在 H 通道上使用直线渐变得到的图像(使用 gimp)。
编辑:我已经编写了一个程序来获取每行的像素值,并绘制结果。您可以看到,色相确实不是线性的,您还可以看到 S 和 V 通道在 115 左右(距离图像顶部 115 像素)明显下降,这确实与绿色波段相对应。
考虑到曲线的形状,我倾向于认为它们可能是为了模拟某些东西。但没有相关领域的经验来识别曲线的形状。
下面,我添加了 HSV 和 RGB 模型中变化的图表。图表的左侧代表条形的顶部。X 轴标签代表像素
我觉得很有趣。已添加书签。
归档时间: |
|
查看次数: |
679 次 |
最近记录: |