《数字图像处理》第5次课程作业,1. 彩色图像的直方图均衡化2. 彩色图像的直方图均衡化与饱和度增强

任务

1.读取彩色输入图像,可视化

2.基于直方图均衡化的彩色图像对比度增强: 将输入图像由RGB空间映射至HSV空间,保持H与S通道不变,对亮度通道V进行直方图均衡化,映射回RGB空间,保存并可视化图像;

3. 直方图均衡化+饱和度增强:将输入图像映射至HSV空间,固定H不变;对亮度通道V直方图均衡化;对各像素的S通道增加一个小正数(如0.1, 0.3),并确保增加后不超过1。最后由HSV空间映射回RGB空间,保存并可视化结果。

比较原始输入图像,以及两种处理结果,理解对比度增强以及饱和度增强。

代码

from PIL import Image
from pylab import *
import cv2
import numpy as np
import math
import matplotlib.pyplot as plt


plt.rcParams['font.sans-serif'] = ['SimHei']       # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False         # 解决保存图像是负号'-'显示为方块的问题

img = array(Image.open(r'input.jpg'))
cv2.imshow('a',img)
cv2.waitKey(0)


# 将BGR图像转换到HSV空间中
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 将HSV图像通道分离
channels = cv2.split(hsv)
# 对第1个通道即色调通道进行全局直方图均衡化并保存
cv2.equalizeHist(channels[2],channels[2])
# 将处理后的通道和没有处理的两个通道合并,命名为hsv
cv2.merge(channels,hsv)
# 将HSV图像转换回BGR图像
cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR, img)
cv2.imshow('b',img)
cv2.waitKey(0)


hsv = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2HSV)
h, s, v = cv2.split(hsv)

cv2.equalizeHist(s, s)

s = cv2.add(s, 0.3)
h = cv2.convertScaleAbs(h)
s = cv2.convertScaleAbs(s)
v = cv2.convertScaleAbs(v)

hsv = cv2.merge([h, s, v])
img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

cv2.imshow('c', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果 

猜你喜欢

转载自blog.csdn.net/m0_67629315/article/details/130902902