2016-06-25 129 views
13

我編寫了下面的代碼,以使用NORM_L1在OpenCV中正常化圖像。但輸出圖像只是黑色。如何解決這個問題?正常化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

用L1標準化圖像的動機是什麼? –

回答

17

如果要將範圍更改爲[0,1],請確保輸出數據類型爲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需要我指定一個dst輸入參數。在這種情況下,您可能需要將norm_image初始化爲圖像副本並將其作爲dst傳遞。 – ckirksey3

+1

@ ckirksey3你只需將'None'作爲'dst'。沒有意義增加一行額外的代碼。 –

7

當您使用NORM_L1對矩陣進行歸一化時,您將每個像素值除以圖像中所有像素的絕對值之和。因此,所有像素值變得遠遠小於1,並且您會得到黑色圖像。嘗試NORM_MINMAX而不是NORM_L1。

+2

那麼在NORM_MINMAX中究竟發生了什麼? –

+1

最小像素值將被映射到最小輸出值(alpha),並且最大像素值將被映射到最大輸出值(beta)。我相信在線性縮放之間的一切。 – rsaxvc