OpenCV Python 直方图均衡化彩色图像

38

我需要对一张彩色图像进行直方图均衡化。

首先将彩色图像转换为灰度图像,并将其提供给equalizeHist函数:

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

但是在此之后,我需要将图像转换回RGB格式,我该怎么做?

11个回答

0
上面的代码展示了在不同的颜色空间中使用直方图均衡化的方法。
import cv2
import matplotlib.pyplot as plt
import math

img = cv2.imread('../pix/Lenna.png')

def contrast(img, color_space, channels):
    img_temp = img if color_space == 'BGR' else cv2.cvtColor(img, eval(f"cv2.COLOR_BGR2{color_space}"))
    img_temp = cv2.merge([cv2.equalizeHist(c) if i in channels else c for i, c in enumerate(cv2.split(img_temp))])
    return img_temp if color_space == 'RGB' else cv2.cvtColor(img_temp, eval(f"cv2.COLOR_{color_space}2RGB"))

# a dictionary with the names of the color spaces to which the image needs to be converted and the channel numbers to be converted
spaces = {'BGR': [], 'GRAY': [0], 'RGB': [0, 1, 2], 'HSV': [2], 'HLS': [1], 'YCrCb': [0], 'Lab': [0], 'Luv': [0], 'YUV': [0]}

fig = plt.figure(figsize = (15, 15))

cols = 3
rows = math.ceil(len(spaces) / cols)

for i, s in enumerate(spaces):
    fig.add_subplot(rows, cols, i+1)
    plt.imshow(contrast(img, s, spaces[s]));
    # what color space has been converted to and what channel numbers have been changed
    plt.title(f"BGR → {s} {spaces[s]} → RGB") 
plt.show()

Applying equalizeHist across different color spaces


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接