← 返回首页
图像亮度变换
发表时间:2025-02-24 08:10:54
图像亮度变换

在OpenCV中,可以通过简单的像素操作来实现图像亮度变换。亮度变换的基本思路是调整图像中每个像素的灰度值(对于灰度图像)或每个通道的值(对于彩色图像)。

1.图像亮度变换

所谓图像亮度变换就像是给照片“开个灯”或者“拉个窗帘”。图像的每个像素都有一个“亮度值”。调整亮度就是把这个值变大(变亮)或者变小(变暗)。比如,原来亮度值是50(假设100是纯白,0是纯黑),我们把亮度增加20,它就变成了70,看起来就更亮了。总之,图像亮度变换就是调整照片的明暗,让照片看起来更舒服、更符合我们的需求。

在OpenCV中,可以通过简单的像素操作来实现图像亮度变换。亮度变换的基本思路是调整图像中每个像素的灰度值(对于灰度图像)或每个通道的值(对于彩色图像)。以下是两种常见的方法:一种是直接调整亮度,另一种是通过线性变换实现更复杂的调整。

1.1 直接调整亮度

这种方法非常简单,直接在每个像素值上加上一个常数(增加亮度)或减去一个常数(降低亮度)。不过需要注意,像素值的范围是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()

1.2 线性变换

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

其中,α(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()