当前位置: 首页 > news >正文

【OpenCV实现图像:用OpenCV图像处理技巧之白平衡算法】

文章目录

    • 概要
    • 加载样例图像
    • 统计数据分析
    • White Patch Algorithm
    • 小结

概要

白平衡技术在摄影和图像处理中扮演着至关重要的角色。在不同的光照条件下,相机可能无法准确地捕捉到物体的真实颜色,导致图像呈现出暗淡、色调不自然或者褪色的效果。为了解决这个问题,我们需要了解和应用白平衡技术。

白平衡的重要性

在日常生活中,我们经常会遇到不同光源下拍摄的照片,比如在室内使用白炽灯、荧光灯,或者在室外阳光下拍摄。不同类型的光源会产生不同色温的光线,而相机可能无法自动适应这些光线的差异。这就导致了照片中的颜色看起来不真实,不符合我们的视觉感受。

白平衡的原理

白平衡技术的基本原理是通过调整图像中各个颜色通道的增益,使得图像中的灰度区域呈现出中性灰色。简单来说,就是让白色看起来像白色,黑色看起来像黑色。这样一来,不同光源下拍摄的图像就能更准确地还原物体的真实颜色。

白平衡的调整方法

预设白平衡模式: 相机通常提供了一些预设的白平衡模式,比如日光、阴天、荧光灯、白炽灯等。选择合适的预设模式可以在一定程度上改善图像的颜色偏差。手动白平衡: 在一些相机中,我们可以手动设置白平衡。这通常需要在拍摄场景中放置一个白色卡片,让相机通过这个参考物体来调整白平衡。后期处理: 在图像处理软件中,我们也可以进行白平衡的调整。通过调整图像的色温、色调和饱和度等参数,我们可以更精细地控制图像的颜色效果。

白平衡技术的应用

白平衡技术不仅在摄影中应用广泛,在图像处理、广告设计、艺术创作等领域也有重要作用。在商品拍摄、人像摄影、风景摄影等各种场景中,合适的白平衡调整能够提高照片的质量,使其更具吸引力和真实感。

白平衡是一项用于校正由不同照明条件引起的图像颜色偏差的技术。它通过调整图像的颜色对比度,使白色看起来像白色,使黑色看起来像黑色。这个过程非常重要,因为它确保了图像中的颜色是准确的,同时也使图像对人眼来说看起来更加自然。

加载样例图像

# 导入必要的Python库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from skimage import io, img_as_ubyte
from skimage.io import imread, imshow
from matplotlib.patches import Rectangle# 加载样例图像
from skimage import io
import matplotlib.pyplot as plt# 读取图像文件
image = io.imread(r'E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\img.png')# 显示原始图像
plt.figure(figsize=(10,10))
plt.title('Original Image')  # 设置图像标题
plt.imshow(image)  # 显示图像
plt.show()  # 显示图像

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

统计数据分析

# 导入必要的Python库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from skimage import io, img_as_ubyte
from skimage.io import imread, imshow
from matplotlib.patches import Rectangle# 加载样例图像
from skimage import io
import matplotlib.pyplot as plt# 读取图像文件
image = io.imread('qmark.png')# 显示原始图像
plt.figure(figsize=(10,10))
plt.title('Original Image')  # 设置图像标题
plt.imshow(image)  # 显示图像
plt.show()  # 显示图像# 分析图像中的统计信息
def calc_color_overcast(image):# 计算每个通道的颜色偏差red_channel = image[:, :, 0]  # 红色通道green_channel = image[:, :, 1]  # 绿色通道blue_channel = image[:, :, 2]  # 蓝色通道# 创建一个DataFrame来存储结果channel_stats = pd.DataFrame(columns=['Mean', 'Std', 'Min', 'Median', 'P_80', 'P_90', 'P_99', 'Max'])# 计算并存储每个颜色通道的统计信息for channel, name in zip([red_channel, green_channel, blue_channel], ['Red', 'Green', 'Blue']):mean = np.mean(channel)  # 平均值std = np.std(channel)  # 标准差minimum = np.min(channel)  # 最小值median = np.median(channel)  # 中位数p_80 = np.percentile(channel, 80)  # 80th百分位数p_90 = np.percentile(channel, 90)  # 90th百分位数p_99 = np.percentile(channel, 99)  # 99th百分位数maximum = np.max(channel)  # 最大值# 将统计信息存储到DataFrame中channel_stats.loc[name] = [mean, std, minimum, median, p_80, p_90, p_99, maximum]return channel_stats
# 计算颜色通道的统计信息
channel_stats = calc_color_overcast(image)# 打印统计信息
print(channel_stats)

定义了一个函数 calc_color_overcast(image),该函数用于计算图像中每个颜色通道(红色、绿色、蓝色)的统计信息,包括均值、标准差、最小值、中位数、80th、90th、99th 百分位数以及最大值。这些信息对于分析图像的颜色特性非常有用。

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

White Patch Algorithm

白色补丁算法是图像处理中常用的一种颜色平衡方法。其目标是通过缩放图像的颜色通道,使得每个通道中最亮的像素变为白色。这一方法基于假设:图像中最亮的像素应当代表白色。通过调整每个通道的亮度,算法可以校正图像的颜色投射,实现图像的白平衡。

# 导入必要的Python库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from skimage import io, img_as_ubyte
from skimage.io import imread, imshow
from matplotlib.patches import Rectangle# 加载样例图像
from skimage import io
import matplotlib.pyplot as plt# 读取图像文件def white_patch(image, percentile=100):"""Returns a plot comparison of original and corrected/white balanced imageusing the White Patch algorithm.Parameters----------image : numpy arrayImage to process using white patch algorithmpercentile : integer, optionalPercentile value to consider as channel maximum"""white_patch_image = img_as_ubyte((image * 1.0 / np.percentile(image,percentile,axis=(0, 1))).clip(0, 1))# Plot the comparison between the original and white patch corrected imagesfig, ax = plt.subplots(1, 2, figsize=(10, 10))ax[0].imshow(image)ax[0].set_title('Original Image')ax[0].axis('off')ax[1].imshow(white_patch_image, cmap='gray')ax[1].set_title('White Patch Corrected Image')ax[1].axis('off')plt.show()# Read the input image
image = imread(r'E:\yolo项目\Opencv-project-main\Opencv-project-main\CVZone\img.png')# Call the function to implement white patch algorithm
white_patch(image, 100)

在这里插入图片描述
使用默认参数percentile=100并没有明显改善图像,因为图像中RGB通道的最大值已经是[255, 255, 255]。通过观察前一章节中的统计信息,我们可以看到RGB通道的最大值和99百分位数都是255。

为了解决这个问题,我们可以考虑将像素值的较低百分位数视为最大值,而不是绝对的最大值。

white_patch(image, 85)

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

小结

优点:

简单易用:白色补丁算法的实现相对简单,易于理解和操作。这使得它成为修复图像白平衡问题的一种便捷选择,尤其是对于那些不需要复杂操作的场景。针对特定场景有效:该算法在处理具有主要白色区域或中性灰色区域的图像时非常有效。特别是当图像中存在明显的明亮区域时,白色补丁算法可以显著地改善图像的色彩平衡问题,使图像更加清晰和自然。适用性广泛:白色补丁算法可以广泛应用于各种场景,包括摄影、图像处理等领域。它不仅适用于专业摄影师,也可以被普通用户用于简单的图像修复工作。

缺点:

假设限制:算法的核心假设是图像中最亮的颜色是白色,然而,在实际场景中,图像中的最亮颜色可能是其他颜色。当这一假设不成立时,白色补丁算法的效果可能受到限制,无法完全修复图像的白平衡问题。过度校正风险:如果算法的假设不成立,可能会导致过度校正,使图像出现不自然的颜色或伪影。过度校正可能会引入新的问题,影响图像的质量和真实性。颜色偏移和伪影:由于算法的基本假设,即图像中最亮的区域是白色,可能会导致图像的某些区域出现颜色偏移或伪影。这种现象可能在图像的边缘或高光区域更为明显,影响整体视觉效果。在一些特殊场景下,这种颜色偏移和伪影可能会对图像的真实性产生负面影响。

在使用白色补丁算法时,用户需要根据具体情况权衡其优点和缺点,确保选择合适的场景和图像以获得最佳的修复效果。

相关文章:

【OpenCV实现图像:用OpenCV图像处理技巧之白平衡算法】

文章目录 概要加载样例图像统计数据分析White Patch Algorithm小结 概要 白平衡技术在摄影和图像处理中扮演着至关重要的角色。在不同的光照条件下,相机可能无法准确地捕捉到物体的真实颜色,导致图像呈现出暗淡、色调不自然或者褪色的效果。为了解决这个…...

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…...

Java网络编程基础内容

IP地址 域名解析&#xff1a; 本机访问域名时&#xff0c;会从本地的DNS上解析数据&#xff08;每个电脑都有&#xff09;&#xff0c;如果有&#xff0c;获取其对应的IP&#xff0c;通过IP访问服务器。如果本地没有&#xff0c;会去网络提供商的DNS找域名对应的IP&#xff0…...

DevChat:开发者专属的基于IDE插件化编程协助工具

DevChat&#xff1a;开发者专属的基于IDE插件化编程协助工具 一、DevChat 的介绍1.1 DevChat 简介1.2 DevChat 优势 二、DevChat 在 VSCode 上的使用2.1 安装 DevChat2.2 注册 DevChat2.3 使用 DevChat 三、DevChat 的实战四、总结 一、DevChat 的介绍 在AI浪潮的席卷下&#x…...

Python数据容器之[列表]

Python数据容器 Python中的数据容器&#xff1a; 一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为1个元素 每一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 数据容器根据特点的不同&#xff0c;如&#xff1a; 是否支…...

大咖直播间”系列直播课第一期——如何抓住HarmonyOS带来的机遇?

想了解#HarmonyOS#背后隐藏着怎样的商业机遇&#xff1f; 想成功搭上万物互联快车&#xff0c;与HarmonyOS一起发展壮大&#xff1f; 想知道开发者应该怎样把握时代机遇&#xff0c;实现高质高效就业&#xff1f; 答案尽在#华为开发者学堂#《大咖直播间》第一期课程&#xff0c…...

跨域:利用JSONP、WebSocket实现跨域访问

跨域基础知识点&#xff1a;跨域知识点 iframe实现跨域的四种方式&#xff1a;iframe实现跨域的四种方式 注&#xff1a;本篇中使用到的虚拟主机也是上面iframe中配置的 目录 JSONP跨域 JSONP介绍 跨域实验&#xff1a; WebSocket跨域 websocket介绍 跨域实验 JSONP跨域 …...

java项目之戒烟网站(ssm+vue)

项目简介 戒烟网站实现了以下功能&#xff1a; 用户可以对首页&#xff0c;用户分享&#xff0c;论坛交流&#xff0c;公告文章&#xff0c;个人中心&#xff0c;后台管理等功能进行操作。 管理员可以对网站所有功能进行管理&#xff0c;包括管理用户的基本信息。 &#x1f4…...

Redis集群,你真的学会了吗?

目录 1、为什么引入集群 1.1、先来了解集群是什么 1.2、哨兵模式的缺陷 引入集群解决了什么问题 1.3、使用集群&#xff0c;如何存储数据 2、三种主流的分片方式【经典面试题】 2.1、哈希求余算法 2.1.1、哈希求余算法的介绍 2.1.2、哈希求余算法如何扩容 2.2、一致性…...

手机地磁传感器与常见问题

在手机中&#xff0c;存在不少传感器&#xff0c;例如光距感&#xff0c;陀螺仪&#xff0c;重力加速度&#xff0c;地磁等。关于各传感器&#xff0c;虽功能作用大家都有所了解&#xff0c;但是在研发设计debug过程中&#xff0c;却总是会遇到很多头疼的问题。关于传感器&…...

EF Core 数据库映射成实体类

首先在 NuGet 包管理器中安装三个包 Microsoft.EntityFrameworkCore.SqlServer 是一个用于与 SQL Server 数据库进行交互的实体框架核心包。这个包提供了方便的方法和工具&#xff0c;用于在 .NET Core 应用程序中操作 SQL Server 数据库。 Microsoft.EntityFrameworkCore.Too…...

【算法优选】 动态规划之斐波那契数列模型

文章目录 &#x1f38b;前言&#x1f340;[第 N 个泰波那契数](https://leetcode.cn/problems/n-th-tribonacci-number/)&#x1f6a9;题目描述&#x1f6a9;算法流程&#x1f6a9;代码实现 &#x1f384;[使用最小花费爬楼梯](https://leetcode.cn/problems/min-cost-climbing…...

FreeRTOS知识梳理

一、RTOS:Real time operating system,中文意思为 实时操作系统&#xff0c;它是一类操作系统&#xff0c;比如uc/OS、FreeRTOS、RTX、RT-Thread 这些都是实时操作系统。 二、移植FreeRTOS到STM32F103C8T6上 interface选择CMSIS_V1,RCC选择Crystal Ceramic Resonator 。 …...

冒泡排序算法(C++版)

1、什么是冒泡排序&#xff1f; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;其基本思想是多次遍历待排序的元素序列&#xff0c;每次比较相邻两个元素&#xff0c;如果它们的顺序不正确就交换它们&#xff0c;直到整个序列有序。在每一轮遍…...

第22章_数据库的设计规范

文章目录 范式的概念三范式范式一范式二范式三 反范式总结 范式的概念 为了建立冗余较小、结构合理的数据库&#xff0c;设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库&#xff…...

5. 深度学习——正则化

机器学习面试题汇总与解析——正则化 本章讲解知识点 什么是正则化为什么要使用正则化?详细讲解正则化本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。本专栏针对面试题答案进行了优化,尽量做到好…...

【链表和顺序表的优缺点】

...

iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤

目录 iOS移动应用安全加固&#xff1a;保护您的App免受恶意攻击的重要步骤 摘要 引言 一、APP加固的概念 二、APP加固方案的比较 三、保护iOS应用的安全 四、总结 参考资料 摘要 本文介绍了移动应用程序&#xff08;App&#xff09;加固的概念和流程&#xff0c;以及市…...

C# .NET Core API 注入Swagger

C# .NET Core API 注入Swagger 环境 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#.NET Core 可跨平台发布代码,超级奈斯NuGet 套件管理dll将方法封装(据说可以提高效率,就像是我们用的dll那种感觉)Swagger 让接口可视化编写时间2020-12-09 …...

家庭安全计划 挑战赛| 溺水预防

溺水预防 从了解到行动 家庭安全计划 | 少年急救官 地震避险逃生该怎么做&#xff1f; 起火了该如何应对&#xff1f; 哪些行为容易导致溺水&#xff1f; 家庭风险隐患有哪些&#xff1f; 家庭逃生演练四步骤你会吗&#xff1f; 国际救助儿童会&#xff08;英国&#xff…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...