Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从地图猜rgb渐变?_Python_Image_Python Imaging Library_Gradient_Rgb - Fatal编程技术网

Python 从地图猜rgb渐变?

Python 从地图猜rgb渐变?,python,image,python-imaging-library,gradient,rgb,Python,Image,Python Imaging Library,Gradient,Rgb,我有一张比例尺像这样的地图:(数字只是一个例子) 它描述了地图上的单个变量。然而,我无法访问原始数据,几乎一无所知 关于图像处理。我所做的是使用PIL获得地图上每个点的像素坐标和RGB值。只需使用pix=im.load()并为每个x,y保存pix[x,y]。现在我想用上面的梯度来猜测每个点的值 这种梯度有没有标准公式?对训练有素的眼睛来说,它看起来很熟悉吗?我访问过一些例子。。。但我不确定它是否使用了色调、rgb高度功能或其他功能(为了方便起见,我还对一些绿色/眉毛/红色色盲):) 任何关于如何

我有一张比例尺像这样的地图:(数字只是一个例子)

它描述了地图上的单个变量。然而,我无法访问原始数据,几乎一无所知 关于图像处理。我所做的是使用PIL获得地图上每个点的像素坐标和RGB值。只需使用
pix=im.load()
并为每个
x,y
保存
pix[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函数来提取值。还是我做错了什么?以下是s的颜色转换为代码:

你可以用固定的饱和度和亮度来改变色调,从而得到类似的效果


在我看来,图像中的比例看起来像HSV梯度,类似于中提到的。如果是这样,您可以使用
colorsys.rgb_to_hls()
colorsys.rgb_to_hsv()
函数从像素中的r、g、b值获得介于0和1之间的色调颜色值。然后可以相应地映射

然而,除了进行OCR,我不知道如何确定所表示的值的范围,除非它是一个可以硬编码的一致范围。

有趣的问题

如果你在HSL颜色空间中从250,85%,85%->21,85%,85%按时钟方向行走,你会得到一个非常接近你所展示的渐变。明显的区别在于,你的图像显示了一个相当窄的绿色值带

所以,如果你有4个幻数,那么你可以插值到地图上的任何一点

这些当然是第一个和最后一个颜色,也是第一个和最后一个刻度值。 这是我在H通道(使用gimp)上获得的直线渐变图像。

编辑:我已经启动了一个程序来获取每行的像素值,并绘制结果。你可以看到,实际上,色调不是线性的,你也可以看到S&V通道在115左右(图像顶部115像素)有一定的倾斜,这确实与绿色带对应

考虑到曲线的形状,我倾向于认为它们可能是用来建模的。但我没有相关领域的经验来识别曲线的形状

下面,我添加了HSV和RGB模型的变化图表。 图表的左侧表示条形图的顶部。 X轴标签表示像素

我觉得很有趣。书签


我建议您定义一个要比较颜色的区域。对这些区域进行FFT。每种颜色由一个频率定义。你在我们的数量上也是这样。然后比较并缩小一个值

我发现有些人喜欢更好地理解它


非常酷!我不知道这个存在,或者你可以在gimp上阅读HSV。它还揭示了顺时针方向的HSV与梯度不太匹配。@Massagran-是的,非常整洁,嗯。甚至可以得到一个制作立体图的gimp插件,但我离题了。。我一直在思考这个梯度,我认为他们使用了2,而不是单一的梯度。1从橙色到(刚刚)绿色。从绿色到蓝色的第二个。我估计你地图上的120对应于连接点。我还认为渐变避免了图像中显示的从~100到130的部分。知道必须使用此工具/设置组合@enhzlep,现在您提到了放大显示渐变,也就是说“加速”放大到这一点:注意,每种颜色都不像gimp渐变那样占据相同的宽度(即,当您接近终点时,中间的黄色变长,红色和蓝色变短)rgb图形看起来像是@Massagran,enhzflep的平滑版本:这种“奇怪的非线性”可能与人眼的视觉特性有关?