2014-09-02 20 views
6

Sto cercando di imparare OpenCV utilizzando Python e sono imbattuto in questo codice qui sotto:Matplotlib: Qual è la funzione di cmap in imshow?

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 

BLUE = [255,0,0] 

img1 = cv2.imread('opencv_logo.png') 
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE) 
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT) 
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101) 
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP) 
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE) 

plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL') 
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE') 
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT') 

plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101') 
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP') 
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT') 

plt.show() 

fonte: http://docs.opencv.org/master/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#exercises

Cosa plt.imshow (img1, 'grigia') fare? Ho provato a cercare su Google e tutto quello che ho potuto capire è che l'argomento "grigio" era una mappa a colori. Ma la mia immagine (la foto è lì sul sito, vedi link) non è visualizzata in scala di grigi. Ho provato a rimuovere il secondo argomento. Quindi il codice era come plt.imshow (img1). Esegue. L'immagine rimane uguale a prima. Quindi cosa fa il secondo argomento "grigio"? Qualcuno può spiegarmi tutto questo? Qualsiasi aiuto apprezzato. Grazie.

PS. Sono totalmente nuovo per matplotlib

risposta

9

Quando img1 ha forma (M,N,3) o (M,N,4), i valori in img1 sono interpretati come valori RGB o RGBA. In questo caso la cmap viene ignorata. Per the help(plt.imshow) docstring:

CMAP: ~matplotlib.colors.Colormap, opzionale, default: Nessuno

Se None, di default a RC image.cmap valore. cmap viene ignorato quando X ha RGB (A) informazioni

Tuttavia, se fosse img una matrice di forma (M,N), allora il cmap controlla la mappa colori utilizzato per visualizzare i valori.


import numpy as np 
import matplotlib.pyplot as plt 
import mpl_toolkits.axes_grid1 as axes_grid1 
np.random.seed(1) 

data = np.random.randn(10, 10) 

fig = plt.figure() 
grid = axes_grid1.AxesGrid(
    fig, 111, nrows_ncols=(1, 2), axes_pad = 0.5, cbar_location = "right", 
    cbar_mode="each", cbar_size="15%", cbar_pad="5%",) 

im0 = grid[0].imshow(data, cmap='gray', interpolation='nearest') 
grid.cbar_axes[0].colorbar(im0) 

im1 = grid[1].imshow(data, cmap='jet', interpolation='nearest') 
grid.cbar_axes[1].colorbar(im1) 
plt.savefig('/tmp/test.png', bbox_inches='tight', pad_inches=0.0, dpi=200,) 

enter image description here

+0

Grazie. Potresti spiegare a cosa serve cmap? Perché usiamo le mappe dei colori? – Clive

+1

La mappa di colori è un dizionario che mappa i numeri in colori. Matplotlib fornisce molti [colormaps incorporati] (http://wiki.scipy.org/Cookbook/Matplotlib/Show_colormaps). Quando hai un array 2D, come 'data' sopra, i valori su ogni punto della griglia sono un float compreso tra 0 e 1. La mappa colori' gray' mappa da 0 a nero e da 1 a bianco. La mappa colori 'jet' mappa da 0 a blu e da 1 a rosso. Vedi il link per una visualizzazione visiva dei colori in mezzo. – unutbu

+0

grazie mille – Clive

Problemi correlati