import matplotlib.pyplot as plt
img = [[0.9, 0.3], [0.2, 0.1]]
cmap = plt.get_cmap('jet')
rgba_img = cmap(img)
rgb_img = np.delete(rgba_img, 3, 2)
cmap
jest wystąpienie matplotlib w LinearSegmentedColormap
klasy, który wywodzi się z grupy Colormap
. Działa z powodu funkcji __call__
zdefiniowanej w Colormap
. Tutaj jest docstring z repozytorium git repo matplotlib, ponieważ nie jest to opisane w API.
def __call__(self, X, alpha=None, bytes=False):
"""
*X* is either a scalar or an array (of any dimension).
If scalar, a tuple of rgba values is returned, otherwise
an array with the new shape = oldshape+(4,). If the X-values
are integers, then they are used as indices into the array.
If they are floating point, then they must be in the
interval (0.0, 1.0).
Alpha must be a scalar between 0 and 1, or None.
If bytes is False, the rgba values will be floats on a
0-1 scale; if True, they will be uint8, 0-255.
"""
Prostszym rozwiązaniem jest wyświetlanie img
korzystając plt.imshow
lub plt.matshow
, a następnie skopiować lub zapisać wynik jako RGB lub RGBA obrazu. To było zbyt wolne dla mojej aplikacji (~ 30 razy wolniej na mojej maszynie).
Zobacz również: http://stackoverflow.com/questions/14869321/is-there-a-way-to-convert-pyplot-imshow-object-to-numpy-array/14877059#14877059. Pamiętaj, aby zaakceptować własną odpowiedź, kiedy ci to pozwoli. – tacaswell
Zgadzam się, to jest podobne do tego pytania, chociaż jest to sformułowane bardziej precyzyjnie. (Szukałem przez chwilę i nie mogłem znaleźć tego pytania.) Jestem całkiem nowy w stackoverflow; czy się łączymy czy coś? – rd11
Nie martw się, nie podejmuj żadnych działań. Oznaczyłem to jako możliwy duplikat, jeśli 4 inne osoby z 3k + przedstawicielem zgodzą się, że to zostanie zamknięte jako duplikat (co oznacza po prostu brak nowych odpowiedzi i stały link do drugiego pytania). Jeśli inne osoby nie wyrażą na to zgody, komentarz pozostanie, ale moje głosowanie bliskie zniknie. Zgadzam się, że udało Ci się lepiej zidentyfikować prawdziwy problem (na podstawie komentarza w Twojej odpowiedzi na temat używania 'imshow'). – tacaswell