opencv图像增强十四:opencv两种白平衡介绍及实现

news2024/9/25 20:00:04

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、白平衡介绍
  • 二、灰度世界法
  • 三、完美反射法


前言

在摄影与影像领域,白平衡是一个至关重要的概念。它直接影响着画面的色彩表现,关系到作品的美感和观感。白平衡的调整,可以让画面呈现出不同的氛围和风格,为摄影师的创作带来无限可能。本文将为您详细介绍两种常见的白平衡模式及其实现方法,帮助您更好地掌握这一技术。

一、白平衡介绍

白平衡的英文为White Balance,其基本概念是“不管在任何光源下,都能将白色物体还原为白色”,对在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿。相机的白平衡设定可以校准色温的偏差 。
人眼能够在不同色温的光源下自动调整对色彩的感知,使得我们看到的白色始终保持为白色。然而,相机的传感器不具备这种自动调整能力,因此在不同的光照条件下,如果没有进行适当的白平衡调整,传感器记录的图像可能会出现色偏。例如,在钨丝灯下拍摄时,如果没有正确的白平衡设置,图像可能会偏黄;在阴天拍摄时,图像可能会偏蓝。
正确的白平衡对于摄影和视频制作至关重要,它能够确保色彩的真实还原,提升作品的视觉效果。如果白平衡设置不当,不仅会影响单个图像或视频片段的色彩表现,还可能增加后期制作的复杂性和工作量。
在opencv中集成了两种可以直接实现白平衡的方法,分别为灰度世界法(GrayworldWB),完美反射法(SimpleWB)下面依次进行介绍。

二、灰度世界法

灰度世界法(Gray World Algorithm)是一种基于色彩恒常性理论的自动白平衡算法。色彩恒常性是指人类视觉系统在不同光照条件下能够识别出物体真实颜色的能力。灰度世界法假设在理想情况下,场景中的平均亮度值应该呈现为中性灰,即R、G、B三个颜色通道的平均值相等。基于这个假设,该算法通过调整每个颜色通道的增益来达到白平衡的目的。

以下是灰度世界法的步骤:

  1. 计算平均亮度:
    对于输入的彩色图像,首先计算每个颜色通道(R、G、B)的平均亮度值。具体操作是对每个通道的所有像素值进行求和,然后除以像素总数。
    在这里插入图片描述

    其中,LR、L G、L B分别是红色、绿色、蓝色通道的平均亮度值,Ri 、Gi 、B i 是各个像素点的颜色值,N 是像素总数。

  2. 计算增益: 假设平均亮度值应该相等,即
    在这里插入图片描述
    根据这个假设,计算每个通道的增益 GR、GG 、GB,使得调整后的通道亮度相等。
    在这里插入图片描述

  3. 调整颜色通道: 使用计算出的增益值调整每个颜色通道的像素值。
    在这里插入图片描述
    其中,Rnew、Gnew 、Bnew是调整后的像素值。

  4. 输出结果: 经过上述调整后,图像的白平衡应该得到了改善,使得图像在不同光照条件下都能保持色彩的自然和一致性。

灰度世界法是一种简单有效的白平衡算法,但它也有局限性。由于它假设所有场景的平均亮度都是中性灰,这在某些情况下并不成立,比如场景中存在大量单一颜色时,算法可能会失效。此外,该算法不适用于具有极端颜色偏差的场景。尽管如此,灰度世界法因其简单性和在许多情况下仍能提供满意结果的特点,在图像处理领域中仍然被广泛使用。在opencv中提供了灰度世界法的apicv2.xphoto.createGrayworldWB()
cv2.xphoto.createGrayworldWB() 是 OpenCV 的 xphoto 模块中提供的一个用于实现灰度世界白平衡算法的函数。这个算法基于灰度世界假设,即认为在理想情况下,图像中所有颜色通道的平均值应该相等,从而产生一个灰色的平均图像。

功能:该函数实现了灰度世界白平衡算法,用于调整图像的颜色,使得在平均意义上,图像的颜色通道呈现为中性灰。
类和方法:在 OpenCV 中,GrayworldWB 是实现这一算法的类。它继承自 cv::xphoto::WhiteBalancer 类。主要的公共成员函数包括:
balanceWhite(src, dst):这是应用白平衡到输入图像的方法,其中 src 是输入图像,dst 是输出图像。
getSaturationThreshold() 和 setSaturationThreshold(val):这些方法用于获取和设置像素被包含在灰度世界假设中的最大饱和度阈值。
使用方法:在使用 cv2.xphoto.createGrayworldWB() 时,首先需要创建一个 GrayworldWB 对象,然后调用其 balanceWhite 方法来对图像进行白平衡处理。

使用:

import cv2
path = r"F:\cv_traditional\1727071242313.png"
img = cv2.imread(path)
sw = cv2.xphoto.createGrayworldWB()
sw.balanceWhite(img, img)
cv2.imshow("img",img)
cv2.waitKey(0)

效果:
在这里插入图片描述

三、完美反射法

完美反射法(Perfect Reflector Method)是一种自动白平衡算法,它基于的假设是图像中至少有一个颜色通道在某个区域达到了最大反射率,即该区域的颜色接近于完美反射体的颜色。这种方法通常认为图像中最亮的像素代表了完美反射体的颜色,并以此为基准来调整其他颜色通道,从而实现白平衡。

基本步骤:

  1. 确定完美反射区域: 找到图像中最亮的像素点,这些点被认为是接近完美反射的颜色。
  2. 计算通道增益:
    基于找到的完美反射区域,计算每个颜色通道(R、G、B)的增益。通常,这涉及到将每个通道的最亮像素值(理论上应该是255,代表最大亮度)作为参考点,然后计算其他通道需要调整的增益比例。
  3. 应用通道增益: 使用计算出的增益值调整图像中所有像素的每个颜色通道,使得图像的整体色彩看起来更自然和平衡。
  4. 输出结果: 经过上述调整后,图像的白平衡应该得到了改善,特别是在光照不均匀或存在色偏的情况下。

完美反射法的优点是简单且在某些情况下效果显著,特别是当场景中确实存在接近完美反射的物体时。在opencv中提供了api:cv2.createSimpleWB,其使用和灰度世界法近似
使用案例:

import cv2
path = r"F:\cv_traditional\1727071242313.png"
img = cv2.imread(path)
cv2.imshow("ori",img)
sw = cv2.xphoto.createSimpleWB()
sw.balanceWhite(img, img)
cv2.imshow("img",img)
cv2.waitKey(0)

效果:
在这里插入图片描述

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

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

相关文章

构建网络遇到的问题-AlexNet

1.对模型进行初始化采用的一般代码 def _initialize_weights(self):for m in self.modules(): # 遍历模型每一层if isinstance(m, nn.Conv2d): # 判定m层是否属于nn.Conv2d类型nn.init.kaiming_normal_(m.weight, modefan_out, nonlinearityrelu)if m.bias is not None:nn.in…

从自动化到智能化:AI如何推动业务流程自动化

引言:从自动化到智能化的必然趋势 在当今数字化时代,企业为了提升效率、降低成本,纷纷采用自动化技术来简化重复性任务。然而,传统自动化仅限于标准化操作,无法应对复杂的决策和多变的市场环境。随着人工智能&#xff…

基于springboot垃圾分类网站

基于springboot垃圾分类网站 摘 要 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述垃圾分类网站的当…

Android开发拍身份证带人像框和国徽框效果

Android开发拍身份证带人像框和国徽框效果 拍身份证时往往要带上外框辅助用户拍照,这也是很常见的需求。 一、思路 自定义Camera和自定义拍照的界面,把外框画上去,做个遮罩 二、效果图: Android开发教程实战案例源码分享-拍身…

深入理解计算机系统-Bomb Lab

使用 头歌 平台 GDB 调试器 反汇编函数

动力锂电池电芯壳体市场前景:预计2030年全球市场规模将达到49.2亿美元

动力锂电池罐起着传输能量、承载电解液、保护安全等重要作用,是锂电池的重要组成部分。 据QYResearch调研团队最新报告“全球动力锂电池电芯壳体市场报告2024-2030”显示,预计2030年全球动力锂电池电芯壳体市场规模将达到49.2亿美元,未来几年…

分布式算法

分布式场景下的核心问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):无论服务如何拆分,所有实例节点同一时间看到是相同的数据。 2、可用性…

开源链动 2+1 模式 S2B2C 商城小程序:社交电商团队为王的新引擎

摘要:本文深入探讨在社交电商领域中,团队的重要性以及如何借助开源链动 21 模式 S2B2C 商城小程序,打造具有强大竞争力的团队,实现个人价值与影响力的放大,创造被动收入,迈向财富自由之路,同时为…

从汽车高速线束角度浅谈中控屏黑屏、闪屏及信号阈值低故障-之AEM线束测试仪应用案例

故障成因和解决方案 随着车载信息娱乐技术的迅速发展,中控屏已经成为现代汽车的标配。然而,许多主机厂和消费者在车辆使用过程中常常遇到中控屏出现黑屏、闪屏以及信号阈值低等问题,给使用带来了诸多困扰。本文将从汽车高速线束的角度&#…

GPU服务器本地搭建Dify+xinference实现大模型应用

文章目录 前言一、显卡驱动配置1.检测显卡2.安装驱动 二、安装nvidia-docker二、安装Xinference1.拉取镜像2.运行Xinference3.模型部署 三、安装Dify1.下载源代码2.启动 Dify3.访问 Dify 四、Dify构建应用1.配置模型供应商2.聊天助手3.Agent 前言 本文使用的GPU服务器为UCloud…

MySQL: 数据类型介绍

文章目录 数据类型数值类型字符串类型日期类型 数据类型 数值类型 分为整型和浮点型: BIT类似于数据结构中的位图,BIT可以认为是一组二进制bit位. BIT(10)表示这个类型里就存最多10个bit位. 虽然TINYINT和SMALLINT更节省空间,但是还是更推荐使用INT或者BIGINT. 如果存储空间…

MySql语言操作数据库---增删改查数据库,表,数据

思维导图 SQL语言共分为四大类: 数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、 数据操纵语言DML:(1) 插入:INSERT (2) 更新:UPDATE (3) 删除:DELETE 数据查询语言DQL:数据查询语…

Android 深层链接利用

为了能够从我们的应用程序打开另一个应用程序,我们通常通过声明我们想要访问的 Activity 类的名称来实现这一功能。但是,如果我们要打开的 Activity 在其清单文件中设置了android:exported"false" ,则无法使用此方法。而其中一种替…

人工智能有助于解决 IT/OT 集成安全挑战

思科的一项研究表明,信息技术 (IT) 和运营技术 (OT) 融合所带来的安全问题可以通过人工智能 (AI) 解决,尽管该技术也可能被恶意行为者利用。 该报告由思科和 Sapio Research 联合发布,对 17 个国家的 1,000 名行业专业人士进行了调查&#x…

基于Java,SpringBoot和Vue的仓库管理商品管理电商后台管理系统

摘要 基于Java、Spring Boot和Vue的仓库管理系统是一个现代化的库存管理解决方案,旨在提高仓库运营效率和准确性。系统采用Java作为后端开发语言,结合Spring Boot框架简化配置和部署过程,实现业务逻辑和数据处理。前端使用Vue.js构建用户界面…

2024.9.25 数据分析学习

资料: 【开课吧哩堂】数据挖掘项目之用户流失预警系统_哔哩哔哩_bilibili 五万字 | Spark吐血整理,学习与面试收藏这篇就够了!-腾讯云开发者社区-腾讯云 (tencent.com) 黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通…

**CentOS7安装配置mysql**

CentOS7安装配置mysql 首先先将mysql57-community-release-el7.rpm解压出来 rpm -ivh mysql57-community-release-el7.rpmls /etc/yum.repos.d/ -l // 检查是否解压成功安装mysql yum install -y mysql-community-server可能会出现 GPG 密钥过期 rpm --import https://r…

一个可以免费上传样本图册的网站

在数字化时代,图像和样本图册的重要性不言而喻。无论是设计师、摄影师、艺术家还是普通用户,都需要一个可靠的平台来上传、分享和存储自己的作品。今天,给大家推荐一个可以免费上传样本图册的网站——【FLBOOK】,它为用户提供了无…

UE学习篇ContentExample解读------Blueprint_Communication-上

文章目录 总览描述批次阅览1.1 Basic communication with a target blueprint1.2 Basic communication via actor casting1.3 Blueprint communication via actor casting to child Blueprint1.4 Communicating with all actors of a specific class 概念总结致谢: …

关于预处理详解 #define 宏 #和##

#和## #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带参数的宏的替换列表中。 #运算符所执⾏的操作可以理解为”字符串化“。 当我们有⼀个变量 int a 10; 的时候,我们想打印出: the value of a is 10 . 就可以写&#xff…