如何在matplotlib python中的白色背景上以不同的随机颜色显示对象?

时间:2012-07-13 18:24:52

标签: python matplotlib

我有一个图像,其中我有标有数字的对象,例如属于对象1的所有像素的值都是1,依此类推。其余图像为零。

我希望看到不同颜色的每个对象都带有白色背景。

我尝试了几种颜色贴图,如灰色,喷射等,但它们都没有达到要求,因为它们按顺序将对象从黑暗变为浅色。

非常感谢。

2 个答案:

答案 0 :(得分:4)

使用随机颜色制作自己的色彩图是解决此问题的快捷方法:

colors = [(1,1,1)] + [(random(),random(),random()) for i in xrange(255)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

第一种颜色是白色,为您提供白色背景。

完整的代码:

import scipy
from scipy import ndimage
import matplotlib.pyplot as plt
import matplotlib
from random import random

colors = [(1,1,1)] + [(random(),random(),random()) for i in xrange(255)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

im = scipy.misc.imread('blobs.jpg',flatten=1)
blobs, number_of_blobs = ndimage.label(im)

plt.imshow(blobs, cmap=new_map)
plt.imsave('jj2.png',blobs, cmap=new_map)
plt.show()

样品标记,随机着色输出:

enter image description here

希望你能随便干嘛!

答案 1 :(得分:3)

我遇到了同样的问题,但我想使用HSV颜色。

以下是所需的改编:

请注意,在这种情况下,我知道标签的数量(nlabels)

from matplotlib.colors import LinearSegmentedColormap
import colorsys
import numpy as np

#Create random HSV colors
randHSVcolors = [(np.random.rand(),1,1) for i in xrange(nlabels)]

# Convert HSV list to RGB
randRGBcolors=[]
for HSVcolor in randHSVcolors:
  randRGBcolors.append(colorsys.hsv_to_rgb(HSVcolor[0],HSVcolor[1],HSVcolor[2]))

random_colormap = LinearSegmentedColormap.from_list('new_map', randRGBcolors, N=nlabels)

我没有使用白色作为第一种颜色,但应该与之前的答案相同来实现它。