Je dois effectuer une égalisation d'histogramme pour une image colorée.
Je convertis d'abord l'image colorée en gris et la donne à la fonction equalizeHist
:
image = cv2.imread("photo.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.equalizeHist(image)
cv2.imshow("equalizeHist", image)
cv2.waitKey(0)
Mais après cela, je dois reconvertir l'image en RVB. Comment puis je faire ça?
import cv2
import numpy as np
img = cv2.imread('input.jpg')
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
# equalize the histogram of the Y channel
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0])
# convert the YUV image back to RGB format
img_output = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)
cv2.imshow('Color input image', img)
cv2.imshow('Histogram equalized', img_output)
cv2.waitKey(0)
je ne suis pas sûr que cela fonctionne correctement:
def histogram_equalize(img):
b, g, r = cv2.split(img)
red = cv2.equalizeHist(r)
green = cv2.equalizeHist(g)
blue = cv2.equalizeHist(b)
return cv2.merge((blue, green, red))
Une approche plus générale consisterait à transformer les valeurs RVB en un autre espace contenant une valeur de luminescence/intensité (Luv, Lab, HSV, HSL), à appliquer l'histeq uniquement dans le plan d'intensité et à effectuer la transformation inverse.
Si vous voulez égaliserHist l'image RVB, vous ne devez pas convertir en gris au lieu d'égaliser les canaux RVB un par un.
Donc, je pense que peut-être voici ce que vous voulez:
def equalize_hist(img):
for c in xrange(0, 2):
img[:,:,c] = cv2.equalizeHist(img[:,:,c])
cv2.imshow('Histogram equalized', img)
cv2.waitKey(0)
return img