【图像处理基石】OpenCV中都有哪些图像增强的工具?
OpenCV 图像增强工具系统性介绍
OpenCV 提供了丰富的图像增强工具,主要分为以下几类:
-
亮度与对比度调整
- 线性变换(亮度/对比度调整)
- 直方图均衡化
- 自适应直方图均衡化(CLAHE)
-
滤波与平滑
- 高斯滤波
- 中值滤波
- 双边滤波
-
锐化与边缘增强
- 拉普拉斯算子
- 高通滤波
- 非锐化掩蔽(Unsharp Masking)
-
色彩空间变换
- 灰度转换
- HSV色彩调整
- 颜色平衡
-
高级增强技术
- 伽马校正
- 对数变换
- 幂律变换
下面是各种工具的优缺点对比表:
工具类型 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
线性变换 | 简单高效,直接调整亮度对比度 | 参数选择依赖经验,可能导致信息丢失 | 快速调整基础对比度 |
直方图均衡化 | 全局增强对比度,无需参数 | 可能过度增强噪声,局部细节丢失 | 整体对比度不足的图像 |
CLAHE | 局部自适应增强,保留细节 | 计算复杂度高,可能产生伪影 | 医学图像、卫星图像 |
高斯滤波 | 有效去除高斯噪声 | 会模糊边缘 | 预处理阶段降噪 |
中值滤波 | 保留边缘同时去除椒盐噪声 | 不适合处理高斯噪声 | 椒盐噪声较多的图像 |
双边滤波 | 平滑区域同时保留边缘 | 计算速度较慢 | 需要保留细节的降噪场景 |
拉普拉斯算子 | 突出图像边缘细节 | 对噪声敏感 | 边缘检测、图像锐化 |
非锐化掩蔽 | 增强细节同时保持自然外观 | 参数设置不当会导致伪影 | 摄影图像增强 |
伽马校正 | 非线性调整亮度,对暗部/亮部细节增强 | 参数选择困难,可能引入失真 | 低光照或过曝图像 |
HSV色彩调整 | 独立控制色调、饱和度和亮度 | 需要对色彩空间有一定了解 | 特定颜色区域增强 |
Python 代码示例
下面是使用OpenCV实现直方图均衡化和CLAHE的Python代码示例:
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('example.jpg', 0) # 以灰度模式读取图像# 1. 直方图均衡化
equalized = cv2.equalizeHist(image)# 2. CLAHE (对比度受限的自适应直方图均衡化)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
clahe_result = clahe.apply(image)# 显示原图和增强后的图像
plt.figure(figsize=(15, 5))plt.subplot(131)
plt.imshow(image, cmap='gray')
plt.title('原始图像')
plt.axis('off')plt.subplot(132)
plt.imshow(equalized, cmap='gray')
plt.title('直方图均衡化')
plt.axis('off')plt.subplot(133)
plt.imshow(clahe_result, cmap='gray')
plt.title('CLAHE增强')
plt.axis('off')plt.tight_layout()
plt.show()# 保存增强后的图像
cv2.imwrite('equalized.jpg', equalized)
cv2.imwrite('clahe_result.jpg', clahe_result)
下面是一个使用不同滤波方法的代码示例:
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('example.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 转换为RGB格式# 添加椒盐噪声
def add_salt_pepper_noise(img, amount=0.05):noisy = np.copy(img)num_salt = np.ceil(amount * img.size * 0.5)num_pepper = np.ceil(amount * img.size * 0.5)# 添加盐噪声coords = [np.random.randint(0, i - 1, int(num_salt)) for i in img.shape[:2]]noisy[coords[0], coords[1], :] = 255# 添加椒噪声coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in img.shape[:2]]noisy[coords[0], coords[1], :] = 0return noisynoisy_image = add_salt_pepper_noise(image)# 1. 高斯滤波
gaussian = cv2.GaussianBlur(noisy_image, (5, 5), 0)# 2. 中值滤波
median = cv2.medianBlur(noisy_image, 5)# 3. 双边滤波
bilateral = cv2.bilateralFilter(noisy_image, 9, 75, 75)# 显示结果
plt.figure(figsize=(15, 10))plt.subplot(221)
plt.imshow(image)
plt.title('原始图像')
plt.axis('off')plt.subplot(222)
plt.imshow(noisy_image)
plt.title('添加椒盐噪声')
plt.axis('off')plt.subplot(223)
plt.imshow(median)
plt.title('中值滤波')
plt.axis('off')plt.subplot(224)
plt.imshow(bilateral)
plt.title('双边滤波')
plt.axis('off')plt.tight_layout()
plt.show()
这两个示例展示了图像增强的基本方法:
- 第一个示例比较了全局直方图均衡化和自适应直方图均衡化(CLAHE)的效果,CLAHE在保留细节方面通常优于全局方法。
- 第二个示例展示了不同滤波方法对椒盐噪声的处理效果,中值滤波对椒盐噪声有很好的抑制作用,而双边滤波在降噪的同时能保留边缘细节。
你可以根据具体需求选择合适的增强方法,或者组合使用多种方法以获得更好的效果。
相关文章:

【图像处理基石】OpenCV中都有哪些图像增强的工具?
OpenCV 图像增强工具系统性介绍 OpenCV 提供了丰富的图像增强工具,主要分为以下几类: 亮度与对比度调整 线性变换(亮度/对比度调整)直方图均衡化自适应直方图均衡化(CLAHE) 滤波与平滑 高斯滤波中值滤波双…...

WPS PPT设置默认文本框
被一个模板折磨了好久,每次输入文本框都是很丑的24号粗体还有行标,非常恶心,我甚至不知道如何描述自己的问题,非常憋屈,后来终于知道怎么修改文本框了。这种软件操作问题甚至不知道如何描述问题本身,非常烦…...

PostGIS实现矢量数据转栅格数据【ST_AsRaster】
ST_AsRaster函数应用详解:将矢量数据转换为栅格数据 [文章目录] 一、函数概述 二、函数参数与分组说明 三、核心特性与注意事项 四、示例代码 五、应用场景 六、版本依赖 七、总结 一、函数概述 ST_AsRaster是PostGIS中用于将几何对象(如点、线…...

FAST-DDS源码分析PDP(一)
准备开一个FAST-DDS源码分析系列,源码版本FAST-DDS 1.1.0版本。 FAST-DDS这种网络中间件是非常复杂的,所以前期先去分析每个类的作用是什么,然后在结合RTPS DOC,FAST-DDS DEMO,以及FAST-DDS的doc去串起来逻辑。 Builtin Discovery…...

python打卡day29@浙大疏锦行
知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等&…...

【数据结构】2-3-1单链表的定义
数据结构知识点合集 知识点 单链表存储结构 优点:不要求大片连续空间,改变容量方便;缺点:不可随机存取,要耗费一定空间存放指针 /*单链表节点定义*/ typedef struct LNode{ElemType data;struct LNode *next; }LNo…...

贝塞尔曲线原理
文章目录 一、 低阶贝塞尔曲线1.一阶贝塞尔曲线2. 二阶贝塞尔曲线3. 三阶贝塞尔曲线 一、 低阶贝塞尔曲线 1.一阶贝塞尔曲线 如下图所示, P 0 P_0 P0, P 1 P_1 P1 是平面中的两点,则 B ( t ) B ( t ) B(t) 代表平面中的一段线段。…...

3D个人简历网站 4.小岛
1.模型素材 在Sketchfab上下载狐狸岛模型,然后转换为素材资源asset,嫌麻烦直接在网盘链接下载素材, Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克网盘&a…...

创建型:原型模式
目录 1、核心思想 2、实现方式 2.1 基本结构 2.2 代码示例(Java) 3、适用场景 4、new与clone实际场景建议 1、核心思想 目的:通过复制(克隆)现有对象来创建新对象,而不是通过new关键字实例化。对于那…...
浅谈“量子计算应用:从基础原理到行业破局”
量子计算应用:从基础原理到行业破局 引言:量子计算为何成为科技革命新引擎? 量子计算利用量子力学原理(叠加态、纠缠态、量子干涉)突破经典计算的极限,在特定领域可实现指数级加速。根据中研普华预测,2025年全球量子计算市场规模将突破80亿美元,2035年可达8117亿美元。…...
Java面试攻略:从Spring Boot到微服务架构的深入探讨
Java面试攻略:从Spring Boot到微服务架构的深入探讨 场景设定 在一家知名互联网大厂的会议室里,资深面试官王老师正在对一位求职者谢飞机进行技术面试。谢飞机是一位幽默风趣的程序员,他的回答有时让人捧腹大笑。 第一轮:核心技…...
关于文件分片的介绍和应用
文件分片,顾名思义,就是将一个大文件分割成多个小的文件块(chunk)。每个文件块都是原始文件的一部分,并可以通过特定的方式将这些小文件块重新组装成原始文件。 1. 基本原理: 文件分片从底层来看,主要是对…...

Tapered Off-Policy REINFORCE_ 如何为LLM实现稳定高效的策略优化?
Tapered Off-Policy REINFORCE: 如何为LLM实现稳定高效的策略优化? 在大语言模型(LLM)的微调领域,强化学习(RL)正成为提升复杂任务性能的核心方法。本文聚焦于一篇突破性论文,其提出的Tapered …...
使用lvm进行磁盘分区
使用lvm进行磁盘分区 目的: 使用/dev/vdb创建一个5g的逻辑卷挂载到/mnt/lvmtest 前提: /dev/vdb是一块干净的空磁盘,数据会被清空!!! 1. 创建物理卷(PV): pvcreate /dev/sdb2. 验证…...

[Java实战]Spring Boot整合Elasticsearch(二十六)
[Java实战]Spring Boot整合Elasticsearch(二十六) 摘要:本文通过完整的实战演示,详细讲解如何在Spring Boot项目中整合Elasticsearch,实现数据的存储、检索和复杂查询功能。包含版本适配方案、Spring Data Elasticsea…...

图像分割(1)U-net
一、整体结构 虽然说是几年前的产品,但是现在还在用,因为深度学习很多时候越是简单的网络用起来效果越好,而且一般是目标比较小的时候产生的分割问题。u-net的优势就是网络结构简单,适合小目标分割,所以一直用到现在&a…...
数位和:从定义到编程实现
1. 定义 数位和(Digit Sum)是指一个数的每一位数字相加的总和。例如: 123 的数位和:1 2 3 645 的数位和:4 5 9 2. 计算方法 计算数位和的通用步骤: 提取每一位数字:从右到左&…...

2025抓包工具Reqable手机抓包HTTPS亲测简单好用-快速跑通
前言 自安卓7.0高版本系统不在信任用户证书,https抓包方式市面查找方法太过复杂手机要root等,前置条件要求太高太复杂,看的头痛,今天一台电脑按步骤操作完即可抓包https,给大家搞定抓包https问题。支持直接编辑修改请求参…...

使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
python 自动化教程
文章目录 前言整数变量字符串变量列表变量算术操作比较操作逻辑操作if语句for循环遍历列表while循环定义函数调用函数导入模块使用模块中的函数启动Chrome浏览器打开网页定位元素并输入内容提交表单关闭浏览器发送GET请求获取网页内容使…...

简单使用Slidev和PPTist
简单使用Slidev和PPTist 1 简介 前端PPT制作有很多优秀的工具包,例如:Slidev、revealjs、PPTist等,Slidev对Markdown格式支持较好,适合与大模型结合使用,选哟二次封装;revealjs适合做数据切换,…...

RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍
视频讲解: RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍 今天测试下V2D,这是K1特有的硬件级别的2D图像加速器,参考如下文档,但文档中描述的部分有不少问题,后面会讲下 https://bianbu-linux.spa…...
人工智能100问☞第26问:什么是贝叶斯网络?
贝叶斯网络是基于有向无环图和条件概率表构建的概率图模型,用于表达变量间的条件依赖关系并进行不确定性推理。 一、通俗解释 想象你玩侦探游戏,要通过零散线索推理真相。贝叶斯网络就像一张"因果关系地图"——用箭头把事件连起来,并标注每个事件发生的概率。比…...

c++多线程debug
debug demo 命令行查看 ps -eLf|grep cam_det //查看当前运行的轻量级进程 ps -aux | grep 执行文件 //查看当前运行的进程 ps -aL | grep 执行文件 //查看当前运行的轻量级进程 pstree -p 主线程ID //查看主线程和新线程的关系 查看线程栈结构 pstack 线程ID 步骤&…...

如何畅通需求收集渠道,获取用户反馈?
要畅通需求收集渠道、有效获取用户反馈,核心在于多样化反馈入口、闭环反馈机制、用户分层管理、反馈数据结构化分析等四个方面。其中,多样化反馈入口至关重要,不同用户有不同的沟通偏好,只有覆盖多个反馈路径,才能捕捉…...
标准库、HAl库和LL库(PC13初始化)
标准库 (Standard Peripheral Library) c #include "stm32f10x.h"void GPIO_Init_PC13(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode GPIO_…...
LangGraph深度解析:构建持久化、可观测的智能体工作流
一、项目概述与技术定位 1.1 LangGraph核心价值 LangGraph是由LangChain团队推出的开源框架(GitHub仓库:https://github.com/langchain-ai/langgraph),专为构建持久化、状态化的智能体工作流设计。作为LangChain生态系统的战略补充,它解决了传统LLM应用在以下方面的关键…...

设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
在工业4.0的智能化浪潮中,非计划停机每年吞噬企业3%-8%的产值。中讯烛龙预测性维护系统通过多模态感知矩阵分布式智能体的创新架构,实现设备健康管理的范式跃迁,帮助制造企业将停机时间压缩70%以上。本文将深度解析技术实现路径与行业级实践方…...
day29 python深入探索类装饰器
目录 一、类装饰器的初步理解 二、类装饰器与函数装饰器的对比 三、类装饰器的实现与应用 (一)为类添加日志功能 (二)动态方法绑定的两种方式 四、手动调用装饰器:类的“后天改造” 五、总结与展望 一、类装饰器…...

Python数据分析三剑客:NumPy、Pandas与Matplotlib安装指南与实战入门
Python数据分析三剑客:NumPy、Pandas与Matplotlib安装指南与实战入门 1. 引言 Python数据分析生态:NumPy、Pandas、Matplotlib是数据科学领域的核心工具链。适用场景:数值计算、数据处理、可视化分析(如金融分析、机器学习、科研…...