opencv-python图像增强七:图像亮度对比度饱和度调整

news2024/9/22 7:32:57

文章目录

  • 一,简介
  • 二,图像亮度对比度修改
  • 三,对比度增强:

一,简介

在图像处理领域,对比度、亮度和饱和度是影响图像视觉效果的重要因素。合理调整这三个参数,可以使图像更具表现力,满足不同场景的需求。本文将带领大家使用OpenCV,这一强大的开源计算机视觉库,轻松实现图像对比度、亮度和饱和度的修改。本文将从基础知识入手,详细介绍如何使用OpenCV对图像进行操作,包括对比度、亮度和饱和度的调整。

二,图像亮度对比度修改

图像的亮度和对比度是图像质量感知的两个基本属性,它们共同决定了图像的视觉效果。
亮度指的是图像中像素的明暗程度。在数字图像中,亮度通常由像素值直接表示。亮度的调整会改变图像的整体明暗水平,但不影响图像中不同颜色或灰度之间的相对关系。提高亮度会使图像看起来更明亮,降低亮度则使图像变暗。在某些情况下,调整亮度可以改善图像在特定光照条件下的可视性。
对比度指的是图像中最亮和最暗部分的差异程度。高对比度图像具有清晰、分明的明暗区分,而低对比度图像则明暗区分不够明显,看起来更为模糊和平淡。对比度的调整会影响图像中细节的可见性,使得图像中的边缘和纹理更加突出或更加柔和。
在opencv中有一个方法可以实现调整图像的亮度和对比度操作cv2.convertScaleAbs()
函数说明:

cv2.convertScaleAbs() 是 OpenCV 库中的一个函数,它用于将输入数组元素的值按比例缩放,并加上一个可选的常数,然后将其转换为绝对值并返回结果。这个函数常用于图像处理,特别是在需要调整图像的亮度和对比度时。
参数:
● src: 输入数组,通常是图像,数据类型为 CV_8U 或 CV_16U 或 CV_32F。
● alpha: 可选的比例因子,用于缩放输入数组元素的值。如果该值为正,则图像的对比度会增加;如果该值小于1,则图像的对比度会降低。默认值为1,表示不改变对比度。
● beta: 可选的常数,用于在每个元素上加上这个值。正值会使图像变亮,负值会使图像变暗。默认值为0,表示不改变亮度。
● dst: 输出数组,其大小和类型与 src 相同。
● dtype: 当这个参数被指定时,输出数组将由这个类型决定;否则,输出数组将与输入数组具有相同的数据类型。

使用代码:

import cv2

# 加载图像
image = cv2.imread(r'E:\R-C.jfif')  # 替换为你的图像路径
image = cv2.resize(image,(0,0),fx=0.5,fy=0.5)
# 检查图像是否成功加载
if image is None:
    raise ValueError("Could not read the image.")

# 定义缩放因子和偏移量
alpha1 = 1.2  # 缩放因子,可以大于1或小于1
beta1 = 0     # 偏移量,增加或减少亮度
alpha2 = 1.0  # 缩放因子,可以大于1或小于1
beta2 = 50     # 偏移量,增加或减少亮度
# 应用cv2.convertScaleAbs()进行缩放和偏移
# 如果图像是彩色的,它会保持原有的色彩通道
scaled_image = cv2.convertScaleAbs(image, alpha=alpha1, beta=beta1)
scaled_image2 = cv2.convertScaleAbs(image, alpha=alpha2, beta=beta2)
# 显示原始图像和调整后的图像
cv2.imshow('image', image)
cv2.imshow('scaled_image1', scaled_image)
cv2.imshow('scaled_image2', scaled_image2)
# 等待按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
增强光照:
在这里插入图片描述
原图:
在这里插入图片描述

三,对比度增强:

在这里插入图片描述
三,图像饱和度修改
图像饱和度是指图像中颜色的纯度或强度。它是颜色三属性之一,与色相(Hue)和亮度(Lightness)或明度(Value)一起,构成了描述颜色的三个基本维度,饱和度是影响图像视觉冲击力和美观度的重要因素之一,通过调整饱和度,可以显著改变图像的情感和风格。
实现代码:

import cv2
import sys
import numpy as np
import matplotlib.pyplot as plt

def Saturation(rgb_img, increment):
    # 将输入图像转换为浮点数,并归一化到0-1范围
    img = rgb_img.astype(np.float64) / 255.0
    # 计算每个像素的最小值,即HSL颜色空间中的亮度最低的部分
    img_min = img.min(axis=2)
    # 计算每个像素的最大值,即HSL颜色空间中的亮度最高的部分
    img_max = img.max(axis=2)

    # 计算饱和度(delta)和亮度(value)的中间值
    delta = (img_max - img_min)
    value = (img_max + img_min)
    # 计算HSL颜色空间中的亮度L
    L = value / 2.0

    # 根据亮度L计算饱和度s的两个可能值
    s1 = delta / (value + 1e-8)  # 防止除以0的情况,添加一个很小的数
    s2 = delta / (2 - value + 1e-8)
    # 根据亮度L选择饱和度s的正确值
    s = np.where(L < 0.5, s1, s2)

    # 计算增量调整后的饱和度,如果饱和度加上增量大于1,则保持原饱和度,否则用1减去增量
    temp = increment + s
    alpha = np.where(temp > 1, s, 1 - increment)
    # 计算调整后的alpha值
    alpha = 1 / alpha - 1

    # 对RGB图像的每个通道进行调整,以改变饱和度
    for i in range(3):
        img[:, :, i] += (img[:, :, i] - L) * alpha
    # 确保调整后的RGB值在0到1之间,如果超出这个范围,则将其限制在这个范围内
    img = np.clip(img, 0, 1)

    # 返回调整后的图像
    return img


path = r'E:\R-C.jfif'
increment = 0.5  # 范围-1到1

#  run : python Saturation.py (path) (increment)
if __name__ == "__main__":
    img = cv2.imread(path)
    img = cv2.resize(img,(640,640))
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img_new = Saturation(img_rgb, increment)
    img_new = cv2.cvtColor((img_new*255).astype(np.uint8), cv2.COLOR_RGB2BGR)
    cv2.imshow("img", img)
    cv2.imshow("img_new",img_new)
    cv2.waitKey(0)

效果:
左侧原图,右侧饱和度增强后的图片
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2037169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北斗短报文通信原理

短报文通信原理主要基于北斗卫星导航系统&#xff0c;其过程可以分为以下几个步骤&#xff1a;用户机将包含接收方ID号和通讯内容的通讯申请信号加密后通过卫星转发入站;地面中心站接收到通讯申请信号后&#xff0c;进行脱密和再加密处理&#xff0c;然后将其加入持续广播的出站…

WindowsAPI 查阅笔记:线程、多个线程互同步

1. 线程的创建 HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性 SIZE_T dwStackSize, //线程堆栈大小 LPTHREAD_START_ROUTINE lpStartAddress, //重要: 线程函数指针 LPVOID lpParameter, //重要: 启动线程函数 DWORD dwC…

分布式知识总结(一致性Hash算法)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 一致性Hash算法 假如有三台服务器编号node0、node1、node2&…

若依项目改造-sqlserver(2)

目前启动时&#xff0c;不需要配置数据库 1、启动时&#xff0c;不用检查数据库连接 2、可以在线导出数据库备份bak文件 3、实现不用配置jdk环境启动 4、实现启动没有控制台窗口

排序【归并排序和计数排序】

1.归并排序 1.1 基本思想 并归排序&#xff1a;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#x…

【代理模式】设计模式系列:实现与最佳实践(掌控访问的艺术)

文章目录 Java中的代理模式引言1. 代理模式概念1.1 代理模式定义1.2 代理模式的参与者1.3 代理模式的基本工作原理1.4 代理模式的优点与缺点 2. Java代理模式实现方式2.1 静态代理2.2 动态代理2.2.1 JDK动态代理2.2.2 CGLIB动态代理 2.3 两者之间的区别与选择 3. 使用案例分析3…

Mariadb数据库本机无密码登录的问题解决

Mariadb数据库本机无密码登录的问题解决 安装了mariadb后&#xff0c;发现Mariadb本机无密码才能登录 百度了很多文章&#xff0c;发现很多人是因为root的plugin设置的值不正确导致的&#xff0c;unix_socket可以不需要密码&#xff0c;mysql_native_password 是正常的。 解…

Codeforces Round 965 (Div. 2)

前言 有人在过七夕&#xff0c;我在打 cf &#xff0c;还有某人独自一人在学校机房&#xff0c;凌晨一点骑上共享单车回宿舍欣赏沿途的秋风扫落叶。 Standings&#xff1a;2166 题目链接&#xff1a;Dashboard - Codeforces Round 965 (Div. 2) - Codeforces A. Find K Distin…

未来能源技术

未来能源技术正处于全球焦点的中心&#xff0c;旨在应对气候变化、资源枯竭和能源安全的挑战。未来能源技术的发展方向集中在可再生能源、能源储存技术、智能电网、核聚变以及新材料的应用等多个领域。 1. 可再生能源技术 1.1 太阳能技术 太阳能技术是未来能源发展的核心领域之…

精密Δ-Σ ADC的有效噪声带宽

1 简介 即使对最有经验的模拟设计工程师来说&#xff0c;理解ADC噪声也是一项挑战。Δ-Σ ADC具有量化噪声和热噪声&#xff0c;其变化取决于ADC的分辨率、参考电压和输出数据速率。在系统层面上&#xff0c;噪声分析因附加的信号链组件而变得更加复杂&#xff0c;这些组件中的…

NLP_情感分类_序列模型方案

文章目录 项目背景代码导包读取数据文本预处理举例查看分词器数据集调整进一步剖析&#xff1a;对应Step [{i1}/{len(train_loader)}] 里的train_loader进一步剖析&#xff1a;Step [{i1}/{len(train_loader)}] 里的train_loader&#xff0c;原始的train_df 计算数据集中最长文…

Java 并发(四)—— volatile 和 synchronized

一、volatile 关键字 1.概念 如果我们将一个变量使用 volatile 修饰&#xff0c;这就指示 编译器&#xff0c;这个变量是共享且不稳定的&#xff0c;每次使用它都到主存中进行读取。 2.作用 保证变量对所有线程的可见性。但不能保证数据的原子性。因此不能完全保证线程安全…

STP(生成树)的概述和工作原理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

PHPStorm 环境配置与应用详解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; PHPStorm 是 JetBrains 出品的一款专业 PHP 集成开发环境&#xff08;IDE&#xff09;&#xff0c;凭借其智能的代码补全、调试功能、深度框架支持和前端开发工具&#xff0c;为用户提供了丰富的功能和工具…

简单的敏感词提示功能

简单的敏感词提示功能 1. 需求 公司现在接到通知&#xff0c;部分接口的部分手动输入字段&#xff0c;需要新增敏感词报红提示&#xff0c;敏感词汇现在应该是7000多个左右&#xff0c;需要我们提供一个敏感词校验接口&#xff0c;如果前端输入敏感词&#xff0c;则前端提示出…

在Unreal Engine中使用C++创建基础角色并添加移动功能

目录 引言 步骤一&#xff1a;创建C类 步骤二&#xff1a;编写C代码 步骤三&#xff1a;设置输入绑定 步骤四&#xff1a;在UE编辑器中测试 结论 引言 Unreal Engine&#xff08;UE&#xff09;以其强大的功能和灵活性在游戏开发界广受好评。本文将指导你如何在UE中通过…

校园外卖平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;菜品信息管理&#xff0c;菜品分类管理&#xff0c;购买菜品管理&#xff0c;订单信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&a…

揭开ChatGPT进化之谜:人工智能如何变得更聪明

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域取得了显著进展&#xff0c;尤其是在自然语言处理&#xff08;NLP&#xff09;方面。OpenAI的GPT系列模型&#xff0c;如GPT-3和ChatGPT&#xff0c;代表了这一领域的前沿技术。本文将围绕ChatGPT提升的原因、发展趋势…

基于JSP的个性化影片推荐系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;MyEclipse、Tomcat、MySQL 系统展示 首页 管理员功能模块 用户功能模块 …

国外评论家称《黑神话》PC版有性能问题 还有卡顿现象

《黑神话&#xff1a;悟空》即将正式发售&#xff0c;人们对这款游戏的期待值相当高。所以许多粉丝在耐心等待第一批评测报道&#xff0c;然后再购买这款游戏。在8月16日媒体评测解禁之前&#xff0c;有一位国外评论家认为《黑神话&#xff1a;悟空》是一款好游戏&#xff0c;但…