在OpenCV中,可以通过简单的像素操作来实现图像亮度变换。亮度变换的基本思路是调整图像中每个像素的灰度值(对于灰度图像)或每个通道的值(对于彩色图像)。
所谓图像亮度变换就像是给照片“开个灯”或者“拉个窗帘”。图像的每个像素都有一个“亮度值”。调整亮度就是把这个值变大(变亮)或者变小(变暗)。比如,原来亮度值是50(假设100是纯白,0是纯黑),我们把亮度增加20,它就变成了70,看起来就更亮了。总之,图像亮度变换就是调整照片的明暗,让照片看起来更舒服、更符合我们的需求。
在OpenCV中,可以通过简单的像素操作来实现图像亮度变换。亮度变换的基本思路是调整图像中每个像素的灰度值(对于灰度图像)或每个通道的值(对于彩色图像)。以下是两种常见的方法:一种是直接调整亮度,另一种是通过线性变换实现更复杂的调整。
这种方法非常简单,直接在每个像素值上加上一个常数(增加亮度)或减去一个常数(降低亮度)。不过需要注意,像素值的范围是0到255,所以需要确保调整后的值不会超出这个范围。
示例代码:
import cv2
import numpy as np
# 读取图像
image = cv2.imread('./images/jpg/small_bird01.jpg')
# 调整亮度的函数
def adjust_brightness(image, value):
# 将图像转换为浮点类型,避免溢出
image = image.astype(np.float32)
# 调整亮度
image += value
# 限制像素值范围在0到255之间
image = np.clip(image, 0, 255)
# 转换回uint8类型
image = image.astype(np.uint8)
return image
# 增加亮度
brighter_image = adjust_brightness(image, 50)
# 减少亮度
darker_image = adjust_brightness(image, -50)
# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Brighter Image', brighter_image)
cv2.imshow('Darker Image', darker_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

线性变换是一种更灵活的方法,可以通过调整对比度和亮度来改变图像的视觉效果。公式为:

其中,α(alpha)控制对比度,β(beta)控制亮度。 - 如果α > 1,对比度增加;α < 1,对比度降低。 - β > 0,亮度增加;β < 0,亮度降低。
示例代码:
import cv2
import numpy as np
# 读取图像
image = cv2.imread('./images/jpg/small_bird01.jpg')
# 线性变换函数
def linear_transform(image, alpha, beta):
# 调整对比度和亮度
new_image = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)
return new_image
# 增加亮度并提高对比度
transformed_image = linear_transform(image, alpha=1.2, beta=50)
# 减少亮度并降低对比度
transformed_image2 = linear_transform(image, alpha=0.8, beta=-50)
# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Transformed Image (Brighter & Higher Contrast)', transformed_image)
cv2.imshow('Transformed Image (Darker & Lower Contrast)', transformed_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()
