OpenCV Python equalizeHist imagen en color

Necesito hacer una ecualización de histogtwig para una imagen en color.

Primero convierto la imagen coloreada a gris y la doy a la función equalizeHist :

 image = cv2.imread("photo.jpg") image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.equalizeHist(image) cv2.imshow("equalizeHist", image) cv2.waitKey(0) 

Pero después de esto necesito convertir la imagen de nuevo a RGB; ¿Cómo puedo hacer eso?

Fuente: http://sofes.miximages.com/python/ppre codeimport 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)

No estoy seguro de que funcione correctamente:

 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)) 

Un enfoque más general sería transformar los valores RGB en otro espacio que contenga un valor de luminiscencia / intensidad (Luv, Lab, HSV, HSL), aplicar histeq solo en el plano de intensidad y realizar la transformación inversa.

Si desea igualarHistar la imagen RGB, no debe convertir a gris en lugar de igualar los canales RGB uno por uno.

Entonces, creo que tal vez esto es lo que quieres:

 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