Python - 将颜色映射应用于灰度numpy数组并将其转换为图像

5

我想实现类似于Photoshop中可用的渐变映射效果。 已经有一个帖子解释了所需的结果。 此外,这个答案正好涵盖了我想要做的,但是

im = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))

由于我不知道如何将数组归一化为1.0的值,所以它对我来说无法工作。

以下是我打算让它工作的代码。

im = Image.open(filename).convert('L') # Opening an Image as Grayscale
im_arr = numpy.asarray(im)             # Converting the image to an Array 

# TODO - Grayscale Color Mapping Operation on im_arr

im = Image.fromarray(im_arr)

有谁能指出将颜色映射应用于此数组的可能选项和理想方式?我不想绘制它,因为似乎没有简单的方法将pyplot图转换为图像。

另外,您能指出如何对数组进行归一化吗?由于我无法这样做并且找不到任何帮助。

1个回答

2
为了规范化图像,您可以使用以下步骤:
import numpy as np
image = get_some_image() # your source data
image = image.astype(np.float32) # convert to float
image -= image.min() # ensure the minimal value is 0.0
image /= image.max() # maximum value in image is now 1.0

首先将图像进行移位,使最小值为零。这样可以解决负最小值的问题。然后将图像除以最大值,使得结果最大值为一。


4
谢谢!但是对于这个问题,您能否提供一种应用颜色映射的方法? - Wasif Hyder
你发布的代码无法与我建议的规范化一起使用? - jnovacho
是的。我只是想知道是否有一种方法可以功能性地应用自定义颜色映射。 - Wasif Hyder
@AndreyShipilov - 是的,我做到了。jnovacho的解决方案有所帮助,但我还需要自己进行一些创新。如果你遇到了问题,随时联系我,我很乐意提供帮助。 - Wasif Hyder
@WasifHyder 谢谢你啊。我实际上是用opencv做的。显然很容易。现在我有点卡在如何将opencv数据保存到Django图像字段中了。有什么想法吗? - Andrey Shipilov
@AndreyShipilov 这是Django特定的,所以我无法发表评论 - 但您将能够找到相关问题。只需查看opencv上的导出选项,并找到Django支持的格式即可。 - Wasif Hyder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接