我需要对一张彩色图像进行直方图均衡化。
首先将彩色图像转换为灰度图像,并将其提供给equalizeHist
函数:
image = cv2.imread("photo.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.equalizeHist(image)
cv2.imshow("equalizeHist", image)
cv2.waitKey(0)
但是在此之后,我需要将图像转换回RGB格式,我该怎么做?
我需要对一张彩色图像进行直方图均衡化。
首先将彩色图像转换为灰度图像,并将其提供给equalizeHist
函数:
image = cv2.imread("photo.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.equalizeHist(image)
cv2.imshow("equalizeHist", image)
cv2.waitKey(0)
但是在此之后,我需要将图像转换回RGB格式,我该怎么做?
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()