Нормализация изображений в OpenCV

Я написал следующий код для нормализации изображения с использованием NORM_L1 в 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()

Ответ 1

Если вы хотите изменить диапазон до [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)

Ответ 2

Когда вы нормализуете матрицу с помощью NORM_L1, вы делите каждое значение пикселя на сумму абсолютных значений всех пикселей на изображении. В результате все значения пикселей становятся намного меньше 1, и вы получаете черное изображение. Попробуйте NORM_MINMAX вместо NORM_L1.