深度学习中RGB影像图的直方图均衡化python代码and对图片中指定部分做基于掩模的特定区域直方图均衡化
深度学习很重要的预处理步骤
就是需要对做直方图均衡化
其中主要分成灰度图以及RGB图的直方图均衡化
这俩的方法和代码不同
想要去看具体原理的朋友可以查看下面这篇博客的内容
写的很详细
颜色直方图均衡化(https://www.cnblogs.com/wancy/p/17668345.html)
我们这个场景中会用到的就是颜色直方图均衡化了
其中包含三种方法
方法1.在BGR颜色空间下进行直方图均衡化,可以分别对每个通道进行均衡化。
以下是批量读取某个文件夹中的所有图片,并对每张图片做RGB直方图均衡化,使用OpenCV库实现彩色图像直方图均衡化(在BGR颜色空间)的代码:
import cv2
import os
import shutilfilePath = r"F:\deepl\sample\complete\road3\white" # 用于获取文件名称列表
new_path = r"F:\deepl\sample\complete\road3\white-rgb" # 目标文件夹
#move_path = r"F:\deepl\sample\complete\water2\sat" # 目标文件夹file_names = filter(lambda x: x.find('png')!=-1, os.listdir(filePath))# print(file_list)for file in file_names:
# 读取彩色图像path=filePath+'\\'+fileimg = cv2.imread(path)# 分离BGR图像的通道b, g, r = cv2.split(img)# 对每个通道进行直方图均衡化equ_b = cv2.equalizeHist(b)equ_g = cv2.equalizeHist(g)equ_r = cv2.equalizeHist(r)equ_img = cv2.merge((equ_b, equ_g, equ_r))#合并均衡化后的通道# 显示均衡化前后的彩色图像path2=new_path+'\\'+filecv2.imwrite(path2, equ_img)
#cv2.imshow('Original Image', img)
#cv2.imshow('Equalized Image', equ_img)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
做均衡化前后的图片如下所示:

但是,由于我的图片中有些图片存在大面积白色,因此均衡之后颜色就变成了这样:

很明显,由于白色区域的影响,这个结果明显是不对的,想了各种办法:
1、比如用PS把白色区域删掉,保存成png透明背景的再跑上面的代码,结果不对
2、用PS把上面的白色区域先变成灰色,再跑,结果也还是不对
总结原因:是因为我们上面的代码是做全局直方图均衡化,并不是局部的,因此即使是透明背景,结果做出来也不对
而且为了只让我选定的区域做直方图均衡化,其他区域不变
就需要用到下面的方法
基于掩模的特定区域直方图均衡化
这里也是参考了这位博主的文章
但这里他是对灰度图像做的,我们要做的是RGB影像
因此我对代码进行了修改,可以对RGB进行基于掩模的特定区域颜色直方图均衡化
话不多说
直接看代码
import cv2
import os
import numpy as npfilePath = r"F:\deepl\sample\complete\road3\white" # 用于获取文件名称列表
new_path = r"F:\deepl\sample\complete\road3\white-rgb" # 目标文件夹
mask_path = r"F:\deepl\sample\complete\road3\white-mask" # 目标文件夹
#move_path = r"F:\deepl\sample\complete\water2\sat" # 目标文件夹file_names = filter(lambda x: x.find('png')!=-1, os.listdir(filePath))# print(file_list)for file in file_names:
# 读取彩色图像path=filePath+'\\'+filemask_path=mask_path+'\\'+fileimg = cv2.imread(path)# 分离BGR图像的通道b, g, r = cv2.split(img)mask = cv2.imread(mask_path, 0)coord = np.where(mask == 255)print(coord)b_mask = b[coord]g_mask = g[coord]r_mask = r[coord]# 对每个通道进行直方图均衡化equ_b = cv2.equalizeHist(b_mask)equ_g = cv2.equalizeHist(g_mask)equ_r = cv2.equalizeHist(r_mask)equ_img = cv2.merge((equ_b, equ_g, equ_r))#合并均衡化后的通道img2 = img.copy()for i, C in enumerate(zip(coord[0], coord[1])):img2[C[0], C[1]] = equ_img[i][0]# 显示均衡化前后的彩色图像path2=new_path+'\\'+filecv2.imwrite(path2, img2)
#cv2.imshow('Original Image', img)
#cv2.imshow('Equalized Image', equ_img)
#cv2.waitKey(0)
#cv2.destroyAllWindows()

上面3张图分别是RGB原图,黑白掩模,均衡化后的结果
这下可以看出,我们只对其中一部分指定区域做了均衡化
成功!
但是如何批量化跑呢?
我想要让程序自动从文件夹中读取图片,自动将白色和非白色区域生成掩模,然后自动读取后制作均衡化后的结果
相关文章:
深度学习中RGB影像图的直方图均衡化python代码and对图片中指定部分做基于掩模的特定区域直方图均衡化
深度学习很重要的预处理步骤 就是需要对做直方图均衡化 其中主要分成灰度图以及RGB图的直方图均衡化 这俩的方法和代码不同 想要去看具体原理的朋友可以查看下面这篇博客的内容 写的很详细颜色直方图均衡化(https://www.cnblogs.com/wancy/p/17668345.html) 我们这个场景中会用…...
PyTorch深度学习实战(33)——条件生成对抗网络(Conditional Generative Adversarial Network, CGAN)
PyTorch深度学习实战(33)——条件生成对抗网络 0. 前言1. 条件生成对抗网络1.1 模型介绍1.2 模型与数据集分析 2. 实现条件生成对抗网络小结系列链接 0. 前言 条件生成对抗网络 (Conditional Generative Adversarial Network, CGAN) 是一种生成对抗网络…...
编写Bash脚本程序从记录文件中提取history命令的优化,再介绍linux bash语法和结构
目 录 一、引言 二、脚本代码实现 三、bash语法和结构 (一)基本语法 1、脚本开始与结束 2、注释 3、变量 4、数据类型 5、控制结构 6、循环控制 7、函数 8、算术运算 9、算术操作符和逻辑操作符 (二)命令相关…...
Python中Numba库装饰器
一、运行速度是Python天生的短板 1.1 编译型语言:C 对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如 Windows 下的.exe文件,可执行程序里面包含的就是机器码。只要我们拥有可执行程序,就可以随…...
Spring Boot Aop 执行顺序
Spring Boot Aop 执行顺序 1. 概述 在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限&…...
100天精通鸿蒙从入门到跳槽——第16天:ArkTS条件渲染使用教程
博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》 — Go语言学习之旅!《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!100天…...
【Linux C | 进程】Linux 进程间通信的10种方式(1)
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式
前面我们说了mybatis的缓存设计体系,这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的,Mybatis中存在两级缓存。分别是一级缓存(会话级),和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…...
看图说话:Git图谱解读
很多新加入公司的同学在使用Git各类客户端管理代码的过程中对于Git图谱解读不太理解,我们常用的Git客户端是SourceTree,配合P4Merge进行冲突解决基本可以满足日常工作大部分需要。不同的Git客户端工具对图谱展示会有些许差异,以下是SourceTre…...
linux新增用户,指定home目录和bash脚本且加入到sudoer列表
前言 近3年一直用自动化脚本,搞得连useradd命令都不会用了。哈哈。 今天还碰到一个问题,有个系统没有‘useradd’和‘passwd’命令,直接蒙了。当然直接用apt install就能安装,不然还得自己编译折腾一会。新建用户 useradd -d /h…...
经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程
经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程 和之前实现的YOLOv2一样,根据《YOLO目标检测》(ISBN:9787115627094)一书,在不脱离YOLOv3的大部分核心理念的前提下,重构一款较新的YOLOv3检测器,来对YOLOv3有…...
OpenGL/C++_学习笔记(四)空间概念与摄像头
汇总页 上一篇: OpenGL/C_学习笔记(三) 绘制第一个图形 OpenGL/C_学习笔记(四)空间概念与摄像头 空间概念与摄像头前置科技树: 线性代数空间概念流程简述各空间相关概念详述 空间概念与摄像头 前置科技树: 线性代数 矩阵/向量定…...
C语言2024-1-27练习记录
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>//int main() //{ // char c[15] { I, ,a,n,d, ,you,. }; // int i; // for(i 0; i < 15; i) //这个地方有几个地方需要注意一下,首先变量指定之后必须要加上英文状态下的分号 // printf("%c&q…...
深入解析HTTPS:安全机制全方位剖析
随着互联网的深入发展,网络传输中的数据安全性受到了前所未有的关注。HTTPS,作为HTTP的安全版本,为数据在客户端和服务器之间的传输提供了加密和身份验证,从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…...
【197】JAVA8调用阿里云对象存储API,保存图片并获取图片URL地址。
实际工作中,需要用阿里云对象存储保存图片,并且在上传图片到阿里云对象存储服务器后,获取图片在阿里云对象存储服务器的URL地址,以便给 WEB 前端显示。 阿里云对象存储上传图片的工具类 package zhangchao;import com.aliyun.os…...
2024.1.24 C++QT 作业
思维导图 练习题 1.提示并输入一个字符串,统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 #include <iostream> #include <string.h> #include <array> using namespace std;int main() {string str;cout << "…...
jenkins部署过程记录
一、jenkins部署git链接找不到 原因分析: 机器的git环境不是个人git的权限,所以clone不了。Jenkins的master节点部署机器已经部署较多其他的job在跑,如果直接修改机器的git配置,很可能影响到其他的job clone 不了代码,…...
JS-策略设计模式
设计模式:针对特定问题提出的简洁优化的解决方案 一个问题有多种处理方案,而且处理方案随时可能增加或减少比如:商场满减活动 满50元减5元满100元减15元满200元减35元满500元减100元 // 满减金额计算函数 function count(money, type) {if …...
漏洞复现-EduSoho任意文件读取漏洞(附漏洞检测脚本)
免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...
「QT」QString类的详细说明
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
