【python】实现图像中的阴影去除 | 方案和代码

去除图像中的阴影是一项复杂的图像处理任务,尤其是当阴影区域与图像的其他部分混合时。阴影的存在会影响图像的颜色平衡和亮度,导致图像分析和理解的困难。

目录

一 安装依赖

二 函数

① rgb2hsv

② hsv2rgb

三 实现图像中的阴影去除的方法

四 实践

① 代码

② 效果图

五 结论



去除阴影的方法包括基于色彩校正图像分割以及深度学习的技术。图像分割可以用来识别阴影区域,然后单独处理这些区域。常用的技术包括阈值分割区域生长分水岭算法等。深度学习方法卷积神经网络(CNNs),可以非常有效地去除阴影。通过数据集进行模型训练,以便网络学习如何区分阴影和非阴影区域。

一 安装依赖

通过以下命令安装相关依赖:

pip install opencv-python -i  https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i  https://pypi.tuna.tsinghua.edu.cn/simple
pip install scikit-image

二 函数

scikit-image库提供了颜色空间转换功能,其中包括从 RGB 到 HSV 和从 HSV 回到 RGB 的转换。

① rgb2hsv

函数用于将 RGB 图像转换为 HSV(色调、饱和度、明度)颜色空间。HSV 颜色空间通常更接近人类对颜色的感知方式。

skimage.color.rgb2hsv(rgb)

输入参数

rgb:输入的 RGB 图像。

返回值

返回一个形状相同的数组,但颜色空间为 HSV。

② hsv2rgb

函数的作用将 HSV 图像转换回 RGB 图像。

skimage.color.hsv2rgb(hsv)

输入参数

hsv:输入的 HSV 图像。

返回值

返回一个形状相同的数组,但颜色空间为 RGB。

三 实现图像中的阴影去除的方法

① 读取输入的图像。

② 色彩空间转换

使用rgb2hsv函数将RGB图像转换为HSV色彩空间。

③ 图像分割

使用Otsu阈值分割技术在V通道上检测阴影区域。

④ 阴影区域处理

对检测到的阴影区域进行亮度增强,以模拟去除阴影的效果。

⑤ 色彩空间转换

使用hsv2rgb函数将HSV 图像转换为RGB色彩空间。

⑥ 显示和保存结果

显示原始图像和阴影去除结果图像。保存阴影去除效果图像。

四 实践

① 代码

import cv2
import numpy as np
from skimage.color import rgb2hsv, hsv2rgb
from skimage.filters import threshold_otsudef detect_and_remove_shadow(image_path):# 读取图像img = cv2.imread(image_path)img_hsv = rgb2hsv(img)# HSV色彩空间中的V通道用于阴影检测v_channel = img_hsv[:, :, 2]# 使用Otsu阈值分割进行阴影检测thresh = threshold_otsu(v_channel)shadow_mask = v_channel < thresh# 对阴影区域进行亮度增强shadow_region = img_hsv[:, :, :].copy()# 创建增强因子数组enhancement_factors = np.array([1, 1, 1.52])# 确保阴影区域的增强操作在每个颜色通道上分别进行,增强亮度shadow_region[shadow_mask] *= enhancement_factors# shadow_region中的像素值限制在0到1之间# np.clip函数:如果元素值小于指定的最小值,那么该元素将被设为最小值;# 如果元素值大于指定的最大值,那么该元素将被设为最大值;# 如果元素值在指定的范围内,那么该元素值保持不变。shadow_region = np.clip(shadow_region, 0, 1)# 将HSV图像转换回RGBfinal_img = (hsv2rgb(shadow_region) * 255).astype(np.uint8)# 显示和保存结果cv2.imshow('Original', img)cv2.imshow('Shadow Removed', final_img)cv2.imwrite('shadow_removed.jpg', final_img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':detect_and_remove_shadow('Test.jpg')pass

② 效果图

五 结论

从结果图上看,阴影去除效果相当一般,之后尝试下其他的简易方法吧。

至此,本文的内容就结束啦。

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

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

相关文章

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…

文件操作:系统IO

文件操作 目录 基本概念Linux文件特点操作方式1-系统IO操作方式2-标准IO两种操作模式的对比 基本概念 什么是文件 简单的说&#xff0c;文件就是存储在硬件磁盘上的数据集合 文件通过什么来标识&#xff1f; 系统中在处理的文件&#xff08;读、写操作&#xff09;的时候…

ComfyUI-PromptOptimizer:文生图提示优化节点

ComfyUI-PromptOptimizer 是 ComfyUI 的一个自定义节点&#xff0c;旨在优化文本转图像模型的提示。它将用户输入的提示转换为更详细、更多样化、更生动的描述&#xff0c;使其更适合生成高质量的图像。无需本地模型。 1、功能 提示优化&#xff1a;优化用户输入的提示以生成…

windows 搭建flutter环境,开发windows程序

环境安装配置&#xff1a; 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后&#xff0c;随便找个地方解压&#xff0c;然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了&#xff0…

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中&#xff0c;51 单片机就像一颗独特的星辰&#xff0c;散发着神秘而迷人的光芒。对于无数电子爱好者而言&#xff0c;点亮 51 单片机上的第一颗 LED 灯&#xff0c;不仅仅是一次简单的操作&#xff0c;更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…

构建一个简单的深度学习模型

构建一个简单的深度学习模型通常包括以下几个步骤&#xff1a;定义模型架构、编译模型、训练模型和评估模型。下面是一个使用Keras&#xff08;TensorFlow的高级API&#xff09;构建和训练一个简单的全连接神经网络&#xff08;也称为多层感知器&#xff0c;MLP&#xff09;的示…

linux下的NFS和FTP部署

目录 NFS应用场景架构通信原理部署权限认证Kerberos5其他认证方式 命令serverclient查看测试系统重启后自动挂载 NFS 共享 高可用实现 FTP对比一些ftp服务器1. **vsftpd (Very Secure FTP Daemon)**2. **ProFTPD (Professional FTP Daemon)**3. **Pure-FTPd**4. **WU-FTPD (Was…

Python操作Excel——openpyxl使用笔记(3)

3 单元格基本操作 3.1 访问单元格和读写其内容 在前面的例子中&#xff0c;已经简单演示过了向单元格中写入和读取数据。这里进一步提供访问单元格的一些方法。和前面一样&#xff0c;使用工作表的索引方式&#xff0c;可以快速定位一个单元格&#xff1a; import openpyxl w…

【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)

文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统&#xff0c;广泛应用于FortiGate下一代防火墙&#xff0c;为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…

一、1-2 5G-A通感融合基站产品及开通

1、通感融合定义和场景&#xff08;阅读&#xff09; 1.1通感融合定义 1.2通感融合应用场景 2、通感融合架构和原理&#xff08;较难&#xff0c;理解即可&#xff09; 2.1 感知方式 2.2 通感融合架构 SF&#xff08;Sensing Function&#xff09;&#xff1a;核心网感知控制…

头盔识别技术

本项目参考b站视频https://www.bilibili.com/video/BV1EhkiY2Epg/?spm_id_from333.999.0.0&vd_source6c722ac1eba24d4cbadc587e4d1892a7 1.下载miniconda 使用 Miniconda 来管理 Python 环境&#xff08;如 yolov8&#xff09;&#xff0c;就可以通过 conda create -n y…

某讯一面,感觉问Redis的难度不是很大

前不久&#xff0c;有位朋友去某讯面试&#xff0c;他说被问到了很多关于 Redis 的问题&#xff0c;比如为什么用 Redis 作为 MySQL 的缓存&#xff1f;Redis 中大量 key 集中过期怎么办&#xff1f;如何保证缓存和数据库数据的一致性&#xff1f;我将它们整理出来&#xff0c;…

PCL 新增自定义点类型【2025最新版】

目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…

R语言绘图

多组火山图 数据准备&#xff1a; 将CSV文件同一在一个路径下&#xff0c;用代码合并 确保文件列名正确 library(fs) library(dplyr) library(tidyr) library(stringr) library(ggplot2) library(ggfun) library(ggrepel)# 获取文件列表 file_paths <- dir_ls(path &quo…

ICC和GCC编译器编译Openmp程序的运行区别

1、背景介绍 硬件和隔核设置&#xff1a; Intel E5 V4 14核。 配置 isolcpus2,3,4,5,6,7,8,9,10,11,12,13&#xff0c;隔离了 12 个核心&#xff0c;仅保留核心 0 和核心 1 作为普通调度核心。 操作系统 湖南麒麟3.3-3B OpenMP并行配置&#xff1a; 使用核心 4 到核心 …

改进果蝇优化算法之一:自适应缩小步长的果蝇优化算法(ASFOA)

自适应缩小步长的果蝇优化算法(ASFOA)是对传统果蝇优化算法的一种重要改进,旨在克服其后期种群多样性不足、容易过早收敛和陷入局部最优等问题。有关果蝇优化算法的详情可以看我的文章:路径规划之启发式算法之二十七:果蝇优化算法(Fruit Fly Optimization Algorithm,FOA…

ubuntu22.04安装注意点

换源方式 22.04默认使用/etc/apt/sources.list而非/etc/apt/sources.list.d # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse # deb-src https…

C#表达式和运算符

本文我们将学习C#的两个重要知识点&#xff1a;表达式和运算符。本章内容会理论性稍微强些&#xff0c;我们会尽量多举例进行说明。建议大家边阅读边思考&#xff0c;如果还能边实践就更好了。 1. 表达式 说到表达式&#xff0c;大家可能感觉有些陌生&#xff0c;我们先来举个…

LARGE LANGUAGE MODELS ARE HUMAN-LEVEL PROMPT ENGINEERS

题目 大型语言模型是人类级别的提示工程师 论文地址&#xff1a;https://arxiv.org/abs/2211.01910 项目地址&#xff1a;https://github.com/keirp/automatic_prompt_engineer 摘要 通过对自然语言指令进行调节&#xff0c;大语言模型 (LLM) 显示了作为通用计算机的令人印象深…

基础入门-反弹Shell渗透命令Reverse反向Bind正向利用语言文件下载多姿势

知识点&#xff1a; 1、反弹Shell-项目&命令&语言等 2、系统渗透命令-网络&文件&操作等 一、演示案例-反弹Shell-自带命令&语言代码&三方项目 1、反弹Shell的前提条件 已知存在的漏洞利用或执行命令的地方 2、为什么要反弹Shell? 往往由于很多因…