import os, sys
import cv2, time
import numpy as np
# 色彩增强
def color_enhance(image):
# 转换颜色空间到CMY
image_BGR = image.copy()
image_CMY = 255 - image_BGR
# 找CMY空间中最小值
image_min = image_CMY[:,:,0].copy()
image_min[image_CMY[:,:,0]>image_CMY[:,:,1]] = image_CMY[:,:,1][image_CMY[:,:,0]>image_CMY[:,:,1]]
image_min[image_min>image_CMY[:,:,2]] = image_CMY[:,:,2][image_min>image_CMY[:,:,2]]
# 减去最小值
image_CMY[:,:,0] = image_CMY[:,:,0] - image_min
image_CMY[:,:,1] = image_CMY[:,:,1] - image_min
image_CMY[:,:,2] = image_CMY[:,:,2] - image_min
# 转换得到的CMY图像到HSV空间
image_HSV = cv2.cvtColor(image_CMY, cv2.COLOR_BGR2HSV)
# 找V信道极大极小值,极大值可调整最终色彩鲜艳程度
max_v = np.max(image_HSV[:,:,2]) / 255.0
min_v = np.min(image_HSV[:,:,2]) / 255.0
# 重新量化V值
image_HSV[:,:,2] = ((image_HSV[:,:,2]/255.0 - min_v) / (max_v - min_v)) * 255.0
image_HSV[:,:,2][image_HSV[:,:,2] > 255] = 255
image_HSV[:,:,2][image_HSV[:,:,2] < 0] = 0
# HSV->BGR,注意此时result_image值范围为0-255,超过值会自动减-255
result_image = cv2.cvtColor(image_HSV, cv2.COLOR_HSV2BGR)
result_image = result_image / 255
result_image[:,:,0] = result_image[:,:,0] + image_min / 255
result_image[:,:,1] = result_image[:,:,1] + image_min / 255
result_image[:,:,2] = result_image[:,:,2] + image_min / 255
result_image[result_image <= 1] = 1 - result_image[result_image <= 1]
result_image[result_image > 1] = 0.0
result_image = (result_image*255).astype(np.uint8)
return result_image
if __name__ == '__main__':
image = cv2.imread('test_img.jpg')
color_image = color_enhance(image)
cv2.imshow('result', color_image)
cv2.waitKey(0)