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()

三,效果:

原图:

暖色图:

冷色图:

相关推荐
好奇龙猫1 小时前
【人工智能学习-AI入试相关题目练习-第七次】
人工智能·学习
Mao.O4 小时前
开源项目“AI思维圆桌”的介绍和对于当前AI编程的思考
人工智能
jake don4 小时前
AI 深度学习路线
人工智能·深度学习
信创天地4 小时前
信创场景软件兼容性测试实战:适配国产软硬件生态,破解运行故障难题
人工智能·开源·dubbo·运维开发·risc-v
幻云20104 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
无风听海5 小时前
CBOW 模型中的输出层
人工智能·机器学习
汇智信科5 小时前
智慧矿山和工业大数据解决方案“智能设备管理系统”
大数据·人工智能·工业大数据·智能矿山·汇智信科·智能设备管理系统
仰望星空@脚踏实地5 小时前
本地Python脚本是否存在命令注入风险
python·datakit·命令注入
静听松涛1335 小时前
跨语言低资源场景下的零样本迁移
人工智能
SEO_juper5 小时前
AI+SEO全景决策指南:10大高价值方法、核心挑战与成本效益分析
人工智能·搜索引擎·seo·数字营销