Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 如何从颜色比例的图像生成matplotlib颜色贴图?_Python_Python 3.x_Matplotlib_Colorbar - Fatal编程技术网

Python 如何从颜色比例的图像生成matplotlib颜色贴图?

Python 如何从颜色比例的图像生成matplotlib颜色贴图?,python,python-3.x,matplotlib,colorbar,Python,Python 3.x,Matplotlib,Colorbar,我拍摄了一张我想与matplotlib一起使用的色标截图。从该图像生成matplotlib colormap对象的好方法/简单方法是什么 编辑:以下是我的尝试: from PIL import Image import matplotlib from matplotlib import pyplot as plt import numpy as np img = Image.open('pet_colourbar.png') data = img.load() # Loop through

我拍摄了一张我想与matplotlib一起使用的色标截图。从该图像生成matplotlib colormap对象的好方法/简单方法是什么

编辑:以下是我的尝试:

from PIL import Image
import matplotlib
from matplotlib import pyplot as plt
import numpy as np

img = Image.open('pet_colourbar.png')
data = img.load()

# Loop through pixels and extract rgb value
rgb_colours = []
for i in range(img.size[1]):
    rgb = [x/255 for x in data[0, i]]  # scale values 0-1
    rgb_colours.append(rgb)

pet_cmap = matplotlib.colors.ListedColormap(rgb_colours[::-1])  # reverse order

# Plot example gradient
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
plt.imshow(gradient, aspect='auto', cmap=pet_cmap)

您可以尝试以下操作:LinearSegmentedColormap允许从颜色列表创建颜色贴图。因此,您必须将您的img转换为以下列表:

from matplotlib.image import imread
from matplotlib.colors import LinearSegmentedColormap


img = imread('/path/to/img')

# img is 30 x 280 but we need just one col
colors_from_img = img[:, 0, :]

# commonly cmpas have 256 entries, but since img is 280 px => N=280
my_cmap = LinearSegmentedColormap.from_list('my_cmap', colors_from_img, N=280)
然后像往常一样使用新创建的cmap:

y = random_sample((100, 100))
imshow(y, cmap=my_cmap)

这是一项有趣的任务。但是你试过什么吗?你面临什么问题?当然,你需要仔细阅读这张图片。然后需要从该图像中获取颜色。你能做到吗?如果是这样的话,展示它的代码,这样人们可以帮助你扩展它。如果不是,如果问题发生得更早,为什么还要问彩色地图?很抱歉,这不是一个好问题。我不想重新发明轮子,有一半人认为可能有一个著名的内置方式或第三方软件包来实现这一点,但一些快速的谷歌搜索没有透露任何信息。我在上面添加了一个我想要实现的示例。请清楚地解释这个示例如何无法满足您的期望。@OP我刚刚发布了这个,因为我很好奇如何从图像创建自定义颜色贴图。在发布下一个问题之前,请务必确认。谢谢您的回答!这比我提出的解决方案更简洁。下次我会试着写一个更好的问题。同样,对格式感到抱歉。我不知道我的问题被认为太宽泛了。