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

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

小结

优点:

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

缺点:

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu取消sudo的输入密码

Ubuntu最近要安装软件,每次sudo都要输入一次密码,感觉很麻烦,于是想能不能设置为不输入密码,在网上找了一下解决办法。 主要参考这篇文章: Ubuntu取消sudo时输入密码 上面这篇文章使用的是vim,但是按照博…

【MySQL日志与备份篇】数据库备份与恢复

数据库备份与恢复 文章目录 数据库备份与恢复1. 物理备份与逻辑备份2. mysqldump实现逻辑备份2.1 备份一个数据库2.2 备份全部数据库2.3 备份部分数据库2.4 备份部分表2.5 备份单表的部分数据2.6 排除某些表的备份2.7 只备份结构或只备份数据2.8 备份中包含存储过程、函数、事件…

合成数据如何改变制造业

人工智能正在工厂车间使用,以识别生产线中的低效率。它可以有效地预测设备何时需要维护,以避免停机。人工智能被用于发现产品中的缺陷。 为了完成所有这些工作,使用从人工智能应该学习的过程中收集的数据来创建或训练模型。对于缺陷识别&…

Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转,Kotlin

Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app&q…

java网络编程之UDP协议

文章目录 UDP简介一发一收客户端&#xff1a;服务端&#xff1a; 多发多收实现多开客户端&#xff1a;服务端 UDP简介 UDP&#xff08;User Datagram Protocol&#xff09; DatagramSocket 用于创建客户端、服务端DatagramSocket() :创建客户端的Socket对象&#xff0c;系统随…

Adobe premiere裁剪视频尺寸并转为GIF格式

第 1 步&#xff1a;裁剪视频 修改序列设置以适应裁剪之后的图像区域&#xff1b;序列中的编辑模式不能使用默认的&#xff0c;这里使用的是“ProRes RAW” 第 2 步&#xff1a;设置背景色 需要设置“颜色遮罩”的大小和颜色&#xff0c;颜色遮罩放在下面。 第 3 步&#xff1…

【Git】第四篇:基本操作(理解工作区、暂存区、版本库)

Git 工作区、暂存区和版本库 工作区&#xff1a;就是我们创建的本地仓库所在的目录暂存区&#xff1a; stage或index&#xff0c;一般放在.git(可隐藏文件)目录下的index文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时候也叫做索引&#xff08;in…

Html 引入element UI + vue3 报错Failed to resolve component: el-button

问题&#xff1a;Html 引入element UI vue3 &#xff0c;el-button效果不出来 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><!-- import Vue before Element --> <!-- <script src"https://unpkg.com/vue2/dist…

CCLink转Modbus TCP网关_CCLINK参数配置

CCLink转Modbus TCP网关&#xff08;XD-ETHCL20&#xff09;&#xff0c;具有CCLINK主从站功能。主要用途是将各种MODBUS-TCP设备接入到CCLINK总线中。它可以作为从站连接到CCLINK总线上&#xff0c;也可以作为主站或从站连接到MODBUS-MTP总线上。 1、 配置网关的CCLINK参数&am…

岗前酒精检测仪

岗前酒精检测仪&#xff1a;集“酒精检测智能测温人脸考勤”三合一智能检测仪。 酒精检测功能&#xff1a;采用电化学传感器检测检测酒精浓度&#xff0c;具有吹气中断及吹气流量侦测&#xff0c;吹气防欺骗设计&#xff0c;吹气温度及吸气侦测&#xff1b;响应时间≤20毫秒&am…

Unity中Shader雾效的实现方法一

文章目录 前言一、在片元着色器中使用如下公式计算最终的颜色 lerp(雾效颜色&#xff0c;物体颜色&#xff0c;雾效混合因子)1、获取雾效颜色2、物体的颜色一般通过纹理采样得到&#xff0c;此处用 1 代替测试3、获取 雾效混合因子&#xff08;由 雾的距离 和 雾的浓度决定&am…

代码随想录算法训练营第18天|513. 找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树

JAVA代码编写 513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二叉树的节点个…

安全框架SpringSecurity-2(集成thymeleaf集成验证码JWT)

一、SpringSecurity 集成thymeleaf ①&#xff1a;复制并修改工程 复制04_spring_security并重命名为05_spring_security_thymeleaf ②&#xff1a;添加配置和依赖 添加thymeleaf依赖 <dependency><groupId>org.springframework.boot</groupId><artif…

Scala中编写多线程爬虫程序并做可视化处理

目录 一、引言 二、Scala爬虫程序的实现 1、引入必要的库 2、定义爬虫类 3、可视化处理 三、案例分析&#xff1a;使用Scala爬取并可视化处理电影数据 1、定义爬虫类 2、实现爬虫程序的控制逻辑 3、可视化处理电影数据 四、总结 一、引言 随着互联网的快速发展&#…

(一)正点原子I.MX6ULL kernel6.1移植准备

一、概述 学完了正点原子的I.MX6ULL移植&#xff0c;正点原子的教程是基于Ubuntu18&#xff0c;使用的是4.1.15的内核&#xff0c;很多年前的了。NXP官方也发布了新的6.1的内核&#xff0c;以及2022.04的uboot。 本文分享一下基于Ubuntu22.04&#xff08;6.2.0-36-generic&…

GPT-4.0网页平台-ChatYY

ChatYY的优势&#xff1a; 1. 支持大部分AI模型&#xff0c;且支持AI绘画&#xff1a; 2. 问答响应速度极快&#xff1a; 3. 代码解析&#xff1a; 4. 支持文档解读&#xff1a; 5. PC、移动端均支持&#xff1a; 访问直达&#xff1a;ChatYY.com

Obsidian同步技巧

Obsidian介绍 Obsidian支持Markdown语法&#xff0c;所见即所得。 软件支持多仓库功能&#xff0c;支持笔记文件夹和分层文件夹&#xff0c;等功能。 值得一提的是&#xff0c;软件的笔记同步功能需要付费。 同步技巧 官方同步方法 若资金充足&#xff0c;则可在Obsidian官网…

非常好用的组件库【semi.design】

文章目录 前言semi.design是什么&#xff1f;怎么使用&#xff1f;设计稿转代码后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不…

CCLink转Modbus TCP网关_MODBUS网口设置

兴达易控CCLink转Modbus TCP网关是一种用于连接CCLink网络和Modbus TCP网络的设备。它提供了简单易用的MODBUS网口设置&#xff0c;可以帮助用户轻松地配置和管理网络连接 1 、网关做为MODBUS主站 &#xff08;1&#xff09;将电脑用网线连接至网关的P3网口上。 &#xff08;…

产品化的GPT,能否为“百模大战”照亮未来?

这两天&#xff0c;AI圈都处在一种莫名的震撼感当中。 北京时间 11月7日&#xff0c;OpenAI 举办了首次DevDay开发者日活动。活动现场发布了非常多内容&#xff0c;其中有一些按部就班的&#xff0c;比如技术上更新了最新版本的GPT-4 Turbo。也有一些让从业者目瞪口呆&#xff…