webentwicklung-frage-antwort-db.com.de

OpenCV Python EqualizeHist-Farbbild

Ich muss einen Histogrammausgleich für ein farbiges Bild vornehmen.

Zuerst konvertiere ich das farbige Bild in Grau und gebe es der Funktion equalizeHist:

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

Aber danach muss ich das Bild wieder in RGB konvertieren. wie kann ich das machen?

9
Fariss Abdo

Quelle: 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

ich bin mir nicht sicher, ob es richtig funktioniert:

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

Ein allgemeinerer Ansatz wäre die Transformation von RGB-Werten in einen anderen Raum, der einen Lumineszenz-/Intensitätswert enthält (Luv, Lab, HSV, HSL), Histeq nur in der Intensitätsebene anwenden und die inverse Transformation durchführen.

1
AFocsA

Wenn Sie das RGB-Bild equalizeHist möchten, sollten Sie u nicht in Grau konvertieren, sondern RGB-Kanäle nacheinander ausgleichen. 

Also, ich denke, vielleicht ist das, was du willst:

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