opencv-python图像增强十一:图像强光逆光调整:

文章目录

  • 一,简介:
  • 二,方案简述:
  • 三,算法实现步骤:
    • 3.1 获得图像的阴影区域:
    • 3.2 调整阴影区域的亮度和对比度
  • 四:整体代码
  • 五,效果:

一,简介:

在摄影中,逆光或强光条件往往会导致图像出现不均匀的曝光,使得主体过暗而背景过亮。本文旨在通过一系列图像处理方法,改善这种光照不均的问题,从而恢复图像的细节和色彩平衡。通过这种校正,即使是逆光或强光条件下的照片,也能展现出更自然和均匀的光照效果。

二,方案简述:

本方案通过读取图像,将其转换为灰度图并计算平方确定阴影区域,然后根据设定的校正亮度参数创建过渡矩阵以调整图像的亮度和对比度,最后通过指数函数和掩码实现阴影区域的平滑提亮,最终得到校正后的图像。

三,算法实现步骤:

3.1 获得图像的阴影区域:

首先,将输入图像转换为浮点类型并归一化,使其像素值范围在0到1之间,便于后续的数值计算。然后,将归一化的图像转换为灰度图,以便简化处理并专注于亮度信息。接着,计算灰度图的平方,这一步是为了放大亮度较低的区域,使其在后续处理中更容易被识别为阴影区域。之后,计算这些平方值的平均值,用作区分阴影区域和非阴影区域的阈值。最后,根据这个阈值创建一个掩码,将图像中亮度低于平均值的区域(即阴影区域)标记为白色(255),而其他区域标记为黑色(0)。
实现代码:

 # 将输入图像转换为浮点类型并归一化,便于后续处理f = input_image.astype(np.float32) / 255.0# 使用OpenCV将归一化的图像转换为灰度图gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)# 计算灰度图的平方,用以确定阴影区域thresh = (1.0 - gray) ** 2# 计算阴影区域的平均值,用作后续的阈值t = np.mean(thresh)# 创建一个掩码,标记阴影区域(高于平均值的区域)mask = np.where(thresh >= t, 255, 0).astype(np.uint8)

3.2 调整阴影区域的亮度和对比度

获得图像的阴影区域之后需要对图像的阴影区域进行调整,通过计算校正参数并创建两个过渡矩阵,分别用于调整图像的对比度和亮度,实现了对逆光条件下图像阴影区域的校正,通过指数函数和平滑过渡,使图像在阴影区域与非阴影区域之间达到自然的亮度与对比度变化,最终得到校正后的图像。
实现代码:

	max_val = 4  # 最大校正范围bright = light / 100.0 / max_val  # 计算校正强度mid = 1.0 + max_val * bright  # 计算中间值# 创建两个过渡矩阵,用于调整图像的亮度和对比度midrate = np.where(mask == 255, mid, ((mid - 1.0) / t * thresh) + 1.0)brightrate = np.where(mask == 255, bright, (1.0 / t * thresh) * bright)# 使用指数函数调整图像亮度,并通过掩码实现平滑过渡result = np.clip(pow(f, 1.0 / midrate[:, :, np.newaxis]), 0.0, 1.0)# 根据计算出的亮度率调整图像,限制值在0到1之间result = np.clip(result * (1.0 / (1 - brightrate[:, :, np.newaxis])), 0.0, 1.0) * 255# 将结果转换为8位无符号整型,以便显示和保存result = result.astype(np.uint8)

四:整体代码

import cv2
import numpy as npdef shadow(input_image, light):# 将输入图像转换为浮点类型并归一化,便于后续处理f = input_image.astype(np.float32) / 255.0# 使用OpenCV将归一化的图像转换为灰度图gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)# 计算灰度图的平方,用以确定阴影区域thresh = (1.0 - gray) ** 2# 计算阴影区域的平均值,用作后续的阈值t = np.mean(thresh)# 创建一个掩码,标记阴影区域(高于平均值的区域)mask = np.where(thresh >= t, 255, 0).astype(np.uint8)# 设置校正参数max_val = 4  # 最大校正范围bright = light / 100.0 / max_val  # 计算校正强度mid = 1.0 + max_val * bright  # 计算中间值# 创建两个过渡矩阵,用于调整图像的亮度和对比度midrate = np.where(mask == 255, mid, ((mid - 1.0) / t * thresh) + 1.0)brightrate = np.where(mask == 255, bright, (1.0 / t * thresh) * bright)# 使用指数函数调整图像亮度,并通过掩码实现平滑过渡result = np.clip(pow(f, 1.0 / midrate[:, :, np.newaxis]), 0.0, 1.0)# 根据计算出的亮度率调整图像,限制值在0到1之间result = np.clip(result * (1.0 / (1 - brightrate[:, :, np.newaxis])), 0.0, 1.0) * 255# 将结果转换为8位无符号整型,以便显示和保存result = result.astype(np.uint8)return result# 主程序
# 读取图像文件
src = cv2.imread(r"F:\traditional_vison\2.jpg")
# 设置校正亮度参数,负值表示减少亮度,正值表示增加亮度 取值为-100到100
light = -50
# 调用阴影校正函数
result = shadow(src, light)# 显示原始图像和校正后的图像
cv2.imshow("original", src)
cv2.imshow("result", result)
# 等待按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

五,效果:

原图:
在这里插入图片描述
光照增强百分之五十:
在这里插入图片描述
光照减弱百分之五十:
在这里插入图片描述

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

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

相关文章

UE5 多个类选择界面生成。解决方案思路。

中控器CC 》用户界面控制器UI_CC 》用户界面UI_Inst 生成 CC使用接口,通知UI_CC开始生成UI_Inst。 蓝图函数库编写判断是否存在和创建UI的蓝图。(此处略) UI_CC生成时,userwidget使用接口,注册UI_CC的用户控件的控件…

系统编程-信号

6 信号与管道 1 目录 6 信号与管道 1 信号 信号的概念 信号的使用 信号的发送 通过函数来实现信号的发送 信号改造函数(重点) 给自己发送信号函数 定时闹钟函数 暂停进程的函数 例题: 代码一: 代码二: 代码分析 -- linux系统下…

获发明专利加持,隆道加速推进企业级AI应用落地

近期,北京隆道网络科技有限公司研发的“基于供应链管理的AI采购业务分析装置及方法”获得国家发明专利授权。该项新专利的取得,证明了隆道在AI产业化应用中的技术前瞻性和创新性,也为隆道加速企业级AI应用落地提供了知识产权保障。 根据IBM发…

将标准输入stdin转换成命令行参数——Unix中的xargs指令

xargs是Unix中的复合指令加工机,联合管道符“|”将制造更加强大的“复杂”指令组合。 (笔记模板由python脚本于2024年08月22日 18:13:51创建,本篇笔记适合喜欢Linux的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.…

开放式耳机哪个品牌好?分享四款开放式蓝牙耳机排行榜前十名

我相信很多人都会有这些问题,不知道入手什么蓝牙耳机品牌、有线耳机不好收纳、有线耳机不方便携带、蓝牙耳机听歌的音质怎么样、蓝牙耳机是否会对大脑有危害、蓝牙耳机有什么品牌型号推荐以及想要不同价位的蓝牙耳机品牌推荐参考,okok问题也是很多&#…

GPU池化技术在油气勘探开发中的应用

01 背景介绍 国内某研究院为实现石油勘探开发专业软件资源的统一管理、统一监控、统一共享和统一计量,自主研发了勘探云管理平台(EPCP)和科研工作业务协同平台。该研究院通过两个平台实现了数十种专业勘探开发软件的共享,种类包括地震资料处理和解释&am…

汽车冷却液温度传感器

1、冷却液温度传感器的功能 发动机冷却液温度传感器,也称为ECT,是帮助保护发动机,提高发动机工作效率以及帮助发动机稳定运行的非常重要的传感器之一。 发动机冷却液温度 (ECT) 传感器用于测量发动机的冷却液温度&…

【Lecture1】清华大学大模型公开课——大模型绪论

#清华大模型公开课第二季 #OpenBMB 目录 1. The Evolution of Artificial Intelligence --History 人工智能的演变--历史 1.1 Definition of AI --定义 1.2 Conceptualization of AI -- 概念 1.3 Birth of AI as a Discipline 1.4 Development of AI 1.4.1 Symbolic Int…

有哪些好用的AI工具?这些AI工具让工作学习更高效!

大家好!今天我要给大家介绍一些非常酷的AI工具,它们可以帮助你在不同领域发挥创意和提高效率。让我们一起来探索吧! 我们有AI绘画工具。想象一下,你只需要描述一下你想要的画面,AI就能帮你生成各种风格的艺术作品。无论…

Prometheus 服务发现

目录 1.基于文件的服务发现 2.基于 Consul 的服务发现 3.基于 Kubernetes API 的服务发现 1.基于文件的服务发现 基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。 Prometh…

8月21日笔记

Frp Frp(Fast e Reverse ) Proxy) 是一款简单,好用,稳定的隧道工具。Frp 使用 Go语言开发,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。它是一款高性能的反向代理应用,可以轻松地进行…

解决k8s分布式集群,子节点加入到主节点失败的问题

1.问题情况 Master主节点在 使用 kubeadm init 成功进行初始化后,如下所示 Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/k…

CMakeLists.txt模板

#设置编译该CMakeLists.txt文件所需要的最低cmake版本 CMAKE_MINIMUM_REQUIRED(VERSION 最低版本号)# 该项目名称 PROJECT(项目名称)SET(CMAKE_CXX_STANDARD 11)SET(CMAKE_C_STANDARD 11)# 此行可以理解为将路径下所有的文件装载到自定义集合filelist中 FILE(GLOB filelist &q…

黑神话·悟空修改器免费下载

《黑神话:悟空》是一款备受期待的动作角色扮演游戏,由中国独立游戏开发团队Game Science(游戏科学)开发。 一、修改器下载地址 通过百度网盘分享的文件:黑神话悟空修改器.zip 链接:https://pan.baidu.com/s…

IO进程(7)

目录 1.信号 1.1信号函数 1.1.1信号处理函数 信号的处理过程 2.共享内存 2.1概念 2.2特点 ​​​​​​​​​​​​​​2.3步骤 ​​​​​​​2.4函数接口创建 2.4.1key值 ​​​​​​​​​​​​​​2.4.2创建或打开共享内存 ​​​​​​​​​​​​​​2.4.3映射共享内…

pat1074 k个一组反转链表

是我的错觉吗 直接把%d赋值给数组小标,不能把值副进去? 可是这样可以? 乱套了这 同样的代码 所以暂时将你眼睛闭了起来 所以还是好好老实两次赋值 。。。 写糊了已经 注意这句话 链表中部翻转: 不带dummy真的好麻烦且头…

用Python解决预测问题_多元线性回归模板

多元线性回归是一种统计学方法,用于分析两个或多个自变量(解释变量)与一个因变量(响应变量)之间的关系。在最简单的线性回归模型中,只有一个自变量和一个因变量,它们之间的关系可以用一条直线来…

绿色能源的应用与节约,低碳生活方式指南

在这个全球化的时代,环境问题越来越严重,大家都关注的绿色能源和节约成了热门话题。怎样在日常生活中用好绿色能源,实现低碳生活,是每个环保人士都需要了解的关键问题。这篇文章会详细告诉你绿色能源的使用、优点、节约方法以及低…

msxml*.dll 错误 ‘80072f7d‘ 安全频道支持出错 解决方案

诡异的 msxml6.dll错误 80072f7d安全频道支持出错,用 SSLTools.exe 修复的方法无效!!! ’--------------------------------------------------------------- 有如下简要 ASP 代码,用于获取网页链接返回内容&#xf…

window系统开代理在Conda环境中导致pip安装python包出现timeout

文章目录 1: 临时性配置 pip 代理文件2. 永久性配置 pip 代理文件 在使用 Conda 时,如果你设置了代理,但 pip 仍然无法工作,可能需要确保代理配置正确并适用于 pip。以下是几种可能的解决方法,先看一下报错 WARNING: Retrying (Re…