2016-06-25 26 views
13

Ho scritto il seguente codice per normalizzare un'immagine utilizzando NORM_L1 in OpenCV. Ma l'immagine di output era solo nera. Come risolvere questo?Normalizzazione delle immagini in OpenCV

import cv2 
import numpy as np 
import Image 

img = cv2.imread('img7.jpg') 
gray_image = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
a = np.asarray(gray_image) 


dst = np.zeros(shape=(5,2)) 

b=cv2.normalize(a,dst,0,255,cv2.NORM_L1) 


im = Image.fromarray(b) 

im.save("img50.jpg") 

cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

Qual è la motivazione alla base della normalizzazione di un'immagine con L1? –

risposta

17

Se si desidera modificare l'intervallo su [0, 1], assicurarsi che il tipo di dati di uscita sia float.

image = cv2.imread("lenacolor512.tiff", cv2.IMREAD_COLOR) # uint8 image 
norm_image = cv2.normalize(image, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F) 
+3

Python mi ha richiesto di specificare un parametro di input dst. In questo caso, potresti voler inizializzare norm_image con una copia dell'immagine e passarla come dst. – ckirksey3

+1

@ ckirksey3 Basta passare 'None' come' dst'. Inutile aggiungere una riga di codice in più. –

7

Quando si normalizzare una matrice utilizzando NORM_L1, stai dividendo ogni valore di pixel per la somma dei valori assoluti di tutti i pixel dell'immagine. Come risultato, tutti i valori dei pixel diventano molto inferiori a 1 e si ottiene un'immagine nera. Prova NORM_MINMAX invece di NORM_L1.

+2

quindi cosa succede esattamente in NORM_MINMAX? –

+1

Il valore minimo del pixel verrà mappato sul valore di uscita minimo (alfa) e il valore massimo del pixel verrà mappato sul valore di uscita massimo (beta). Credo con il ridimensionamento lineare per tutto ciò che sta nel mezzo. – rsaxvc

Problemi correlati