2017-06-02 4 views
1

Angenommen ein Bild mit 256 Graustufen,Wie man eine graue cmap mit reservierter falscher Farbe ändert?

So ändern Sie die Farbkarte plt.cm.gray so, dass Pixel mit einem bestimmten Grauwert in einer bestimmten Farbe (rot, blau ...) angezeigt werden. Zum Beispiel, wie man Pixel von Wert = 1 auf Rot und Pixel von Wert = 2 auf Grün setzt?

Ich bin bewusst, masked array example. Aber in diesem Beispiel scheint es, dass nur eine Farbe eingerichtet werden kann.

Ich versuche, eine benutzerdefinierte Cmap „agrey“ zu erzeugen (was nicht):

## try to make a custom cmap 
Ngrey = 256 
a = np.linspace(0,1,num=Ngrey, endpoint=True) 
A = np.array((a,a,a)).transpose() 

#Set pixel with greylevel=1 to red 
A[1,1:3]=0 

col_dict = {'red':A,'green':A, 'blue':A} 
print col_dict['blue'].shape 
agrey = LinearSegmentedColormap('mygray', col_dict) 

Antwort

2

Wie Sie ohnehin in einer diskreten Graustufen zu tun haben, statt LinearSegmentedColormap verwenden, könnten Sie eine ListedColormap verwenden, in dem Sie Definieren Sie Ihre 256 Grauwerte und überschreiben Sie dann die gewünschten Werte. Unterhalb ein minimales Beispiel mit einem zufälligen Bild:

from matplotlib import pyplot as plt 
from matplotlib.colors import ListedColormap 
import numpy as np 

pic = np.random.randint(256, size=(100,100)) 

Ngrey = 256 
greys = np.linspace(0,1,Ngrey) 

colors = [[g,g,g] for g in greys] 

red = [1,0,0] 
green = [0,1,0] 
blue = [0,0,1] 

colors[5] = red 
colors[100] = blue 
colors[200] = green 

mymap=ListedColormap(colors) 

plt.matshow(pic, cmap=mymap) 
plt.show() 

Das Ergebnis sieht dann etwa so aus: random grey scale image with certain, discrete values coloured in red, green, and blue

auf Python 3.5 Getestet

Verwandte Themen