web-dev-qa-db-fra.com

OpenCV Python equalizeHist image colorée

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?

9
Fariss Abdo

Source: https://www.packtpub.com/packtlib/book/Application-Development/9781785283932/2/ch02lvl1sec26/Enhancing%20the%20contrast%20in%20an%20image

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)
24
Mohammad Al Jazaery

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

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.

1
AFocsA

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
0
Sanjay Chan