【图像处理基石】OpenCV中都有哪些图像增强的工具?

news2025/5/19 6:43:46

在这里插入图片描述

OpenCV 图像增强工具系统性介绍

OpenCV 提供了丰富的图像增强工具,主要分为以下几类:

  1. 亮度与对比度调整

    • 线性变换(亮度/对比度调整)
    • 直方图均衡化
    • 自适应直方图均衡化(CLAHE)
  2. 滤波与平滑

    • 高斯滤波
    • 中值滤波
    • 双边滤波
  3. 锐化与边缘增强

    • 拉普拉斯算子
    • 高通滤波
    • 非锐化掩蔽(Unsharp Masking)
  4. 色彩空间变换

    • 灰度转换
    • HSV色彩调整
    • 颜色平衡
  5. 高级增强技术

    • 伽马校正
    • 对数变换
    • 幂律变换

下面是各种工具的优缺点对比表:

工具类型优点缺点适用场景
线性变换简单高效,直接调整亮度对比度参数选择依赖经验,可能导致信息丢失快速调整基础对比度
直方图均衡化全局增强对比度,无需参数可能过度增强噪声,局部细节丢失整体对比度不足的图像
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], :] = 0
    
    return noisy

noisy_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()

这两个示例展示了图像增强的基本方法:

  1. 第一个示例比较了全局直方图均衡化和自适应直方图均衡化(CLAHE)的效果,CLAHE在保留细节方面通常优于全局方法。
  2. 第二个示例展示了不同滤波方法对椒盐噪声的处理效果,中值滤波对椒盐噪声有很好的抑制作用,而双边滤波在降噪的同时能保留边缘细节。

你可以根据具体需求选择合适的增强方法,或者组合使用多种方法以获得更好的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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关键字实例化。对于那…

Tapered Off-Policy REINFORCE_ 如何为LLM实现稳定高效的策略优化?

Tapered Off-Policy REINFORCE: 如何为LLM实现稳定高效的策略优化? 在大语言模型(LLM)的微调领域,强化学习(RL)正成为提升复杂任务性能的核心方法。本文聚焦于一篇突破性论文,其提出的Tapered …

[Java实战]Spring Boot整合Elasticsearch(二十六)

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

图像分割(1)U-net

一、整体结构 虽然说是几年前的产品,但是现在还在用,因为深度学习很多时候越是简单的网络用起来效果越好,而且一般是目标比较小的时候产生的分割问题。u-net的优势就是网络结构简单,适合小目标分割,所以一直用到现在&a…

2025抓包工具Reqable手机抓包HTTPS亲测简单好用-快速跑通

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

使用 Auto-Keras 进行自动化机器学习

使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…

简单使用Slidev和PPTist

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

RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍

视频讲解: RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍 今天测试下V2D,这是K1特有的硬件级别的2D图像加速器,参考如下文档,但文档中描述的部分有不少问题,后面会讲下 https://bianbu-linux.spa…

c++多线程debug

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

如何畅通需求收集渠道,获取用户反馈?

要畅通需求收集渠道、有效获取用户反馈,核心在于多样化反馈入口、闭环反馈机制、用户分层管理、反馈数据结构化分析等四个方面。其中,多样化反馈入口至关重要,不同用户有不同的沟通偏好,只有覆盖多个反馈路径,才能捕捉…

设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式

在工业4.0的智能化浪潮中,非计划停机每年吞噬企业3%-8%的产值。中讯烛龙预测性维护系统通过多模态感知矩阵分布式智能体的创新架构,实现设备健康管理的范式跃迁,帮助制造企业将停机时间压缩70%以上。本文将深度解析技术实现路径与行业级实践方…

Python数据分析三剑客:NumPy、Pandas与Matplotlib安装指南与实战入门

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

Spring-Beans的生命周期的介绍

目录 1、Spring核心组件 2、Bean组件 2.1、Bean的定义 2.2、Bean的生命周期 1、实例化 2、属性填充 3、初始化 4、销毁 2.3、Bean的执行时间 2.4、Bean的作用域 3、常见问题解决方案 4、与Java对象区别 前言 关于bean的生命周期,如下所示: …