使用分段线性灰度变化方法对图像进行对比度增强代码示例
import numpy as np
import cv2
def linear_gray_scale(img, breakpoints):
"""
对图像进行分段线性灰度变换
:param img: 输入图像
:param breakpoints: 分段点,列表类型,例如[50, 100, 150]
:return: 输出图像
"""
# 将图像转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 获取图像的最大灰度值
max_gray = np.max(gray)
# 分段线性灰度变换
for i in range(len(breakpoints) + 1):
if i == 0:
gray[gray <= breakpoints[i]] = int(max_gray / (len(breakpoints) + 1) * i)
elif i == len(breakpoints):
gray[gray > breakpoints[i - 1]] = int(max_gray / (len(breakpoints) + 1) * i)
else:
gray[(gray > breakpoints[i - 1]) & (gray <= breakpoints[i])] = int(max_gray / (len(breakpoints) + 1) * i)
return gray
# 读取图像
img = cv2.imread('lena.jpg')
# 分段点
breakpoints = [50, 100, 150]
# 分段线性灰度变换
result = linear_gray_scale(img, breakpoints)
# 显示结果
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上面的代码中,我们定义了一个linear_gray_scale函数,用于对图像进行分段线性灰度变换。该函数接受两个参数,分别是输入图像和分段点列表。在函数内部,我们首先将输入图像转为灰度图,然后获取图像的最大灰度值。接着,我们根据分段点对灰度值进行分段,并对每个分段内的灰度值进行线性变换。最后,我们将处理后的灰度图作为函数的返回值。
在主函数中,我们读取了一张图像,并定义了一个分段点列表。然后,我们调用linear_gray_scale函数对图像进行分段线性灰度变换,并将结果显示出来。
原文地址: https://www.cveoy.top/t/topic/bLPh 著作权归作者所有。请勿转载和采集!