opencv-python图像增强十:图像色温调整

文章目录

一,简介:

图像色温是描述图像色彩偏暖或偏冷的一种方式,它通常与实际光源的色温相对应。在摄影和图像处理中,色温通常以开尔文(Kelvin)为单位来表示。较低的色温值(例如2700K)通常与暖色光(如蜡烛光或黄昏时的光)相对应,而较高的色温值(例如5500K或更高)通常与冷色光(如白炽灯或中午的日光)相对应。

在图像处理中,色温调整可以用来改变图像的整体色调,使其看起来更暖或更冷。例如,将图像的色温调低(添加蓝色)可以使其看起来更冷,而将色温调高(添加黄色)可以使其看起来更暖。这种调整可以用来补偿图像在拍摄时可能存在的色温偏差,或者仅仅是为了创造特定的视觉效果。

在OpenCV中,色温调整可以通过创建一个查找表(LUT)来实现,该表将原始颜色值映射到新的颜色值。这个过程通常涉及到对RGB颜色空间的操作,以及对每个通道的独立调整。通过这种方式,可以实现平滑且自然的色温变化,而不会导致颜色过限或失真。

二,算法实现:

本项目通过以下流程实现图像色温的调整:首先生成一个查找表,用于将原始像素值映射到新的像素值,并进行范围限制;接着,将这个查找表应用到图像的各个颜色通道上,以改变颜色;然后,根据输入参数确定色温调整的强度,并创建三个不同的查找表分别应用于红色和绿色通道以增加亮度,以及蓝色通道以减少亮度,从而模拟色温的变化;最后,通过这些调整,图像的整体色调被改变,实现了快速且有效的色温调整效果。

实现代码:

python 复制代码
import cv2
import numpy as np

def create_lut(level):
    # 创建一个查找表(LUT),范围从0到255
    lut = np.arange(256, dtype=np.uint8)
    # 更复杂的颜色映射,这里使用简单的线性映射作为示例
    # 实际上,可以在这里使用更复杂的非线性映射
    for i in range(256):
        if i + level > 255:
            lut[i] = 255
        elif i + level < 0:
            lut[i] = 0
        else:
            lut[i] = i + level
    return lut

def apply_lut(image, lut):
    # 使用OpenCV的LUT函数应用查找表
    return cv2.LUT(image, lut)

def color_temperature(input, n):

    result = input.copy()
    level = n // 2
    # 创建查找表并应用它到RGB通道
    lut_r = create_lut(level)
    lut_g = create_lut(level)
    lut_b = create_lut(-level)
    result[:, :, 2] = apply_lut(result[:, :, 2], lut_r)  # R通道
    result[:, :, 1] = apply_lut(result[:, :, 1], lut_g)  # G通道
    result[:, :, 0] = apply_lut(result[:, :, 0], lut_b)  # B通道
    return result
if __name__ == "__main__":
    src = cv2.imread(r"F:\traditional_vison\2.jpg")
    n1 = 50
    n2 = -50

    # 应用色温调整
    result1 = color_temperature(src, n1)
    result2 = color_temperature(src, n2)
    cv2.imshow("original", src)
    cv2.imshow("result1", result1)
    cv2.imshow("result2", result2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

三,效果:

原图:

暖色图:

冷色图:

相关推荐
aiguangyuan4 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手4 小时前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀4 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
量子-Alex4 小时前
【大模型RLHF】Training language models to follow instructions with human feedback
人工智能·语言模型·自然语言处理
kali-Myon4 小时前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf
晚霞的不甘4 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
陈天伟教授4 小时前
人工智能应用- 语言处理:04.统计机器翻译
人工智能·自然语言处理·机器翻译
Dfreedom.4 小时前
图像处理中的对比度增强与锐化
图像处理·人工智能·opencv·锐化·对比度增强
wenzhangli74 小时前
OoderAgent 企业版 2.0 发布的意义:一次生态战略的全面升级
人工智能·开源
Olamyh4 小时前
【 超越 ReAct:手搓 Plan-and-Execute (Planner) Agent】
python·ai