OpenCV之灰度空间变换

2024-05-28 07:38
文章标签 opencv 空间 变换 灰度

本文主要是介绍OpenCV之灰度空间变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV入门之灰度空间变换

本系列博客主要以数字图像处理第三版为算法基础,以OpenCV为工具进行图像处理基础知识的分享。该教材的前两张基础知识这里不详述,有需要的读者自行查阅。本篇博客介绍第三章的前半部分,灰度变换。
关于OpenCV的编译在之前的文章中都有介绍,分别介绍了OpenCV在Ubuntu上的编译以及在android上的交叉编译。感兴趣的读者可以自己尝试从源码编译,这样方面自己在OpenCV源码上进行调整或这添加自己的功能。如果单纯是使用的话,读者可以在github上下载OpenCV项目下release的库使用。

本篇博文主要介绍灰度空间变换,该技术是图像处理中最基础,最简单的方法,但是也是应用最广泛的方法。灰度空间变换属于一种点处理技术,与之对应的滤波则是一种邻域处理技术。所以灰度空间处理的抽象化函数很简单,如下:

                  s = T(r)

其中,r是原始图像的像素,s是经过T处理后的像素。

理论介绍

理论介绍部分主要分为两部分,基本的灰度变化函数以及直方图处理。首先介绍基本的灰度变化函数,主要包括图像反转,对数变换,伽马变换和分段线性变换函数。

基本灰度变换函数

图像反转

图像反转的计算公式很简单:

s = L − 1 − r s = L - 1 - r s=L1r

其中L代表图像的灰度范围是[0, L - 1];我们通常讨论的是8bit图,也就是灰度级别L=256;这种处理很简单,他特别适用于处理图像暗色区域的白色或者灰色细节,尤其是黑色面积在图像上占据主导地位时。

对数变换

对数变换公式如下:

s = c l o g ( 1 + r ) s = clog(1+r) s=clog(1+r)

其中c是常数,并假设r大于等于0.
对数变换将输入中灰度范围较窄的低灰度值映射为输出范围较宽的高灰度值;我们使用这种变换来扩展图像中的暗像素值,同时压缩更高灰度级的值。反对数变换的作用刚好相反。

伽马变换

伽马变换公式如下:

s = c r γ s = cr^\gamma s=crγ

伽马变换与对数变换类似,都能够调整图像的输出灰度级;区别在与通过调整 γ \gamma γ值我们就能够得到正反对数变换相同的效果,甚至效果增强。

分段线性变换函数

分段线性变换较前三种变换函数的主要优点是,其形式可以任意复杂,因此其可操作空间更大,用户可以根据实际需求来定义不同的函数对图像进行多种变换,进而也造成他的缺点便是规则需要用户自己确定。

  • 对比度拉伸
    最简单的分段线性函数之一便是对比度拉伸变换。如下便是一个用于对比度拉伸的典型变换,也称为阈值处理函数。

T ( r ) = { r , i f ( r ≤ r 0 ) k × r , i f ( r > r 0 & & r ≤ r 1 ) r , i f ( r > r 1 ) T(r) = \begin{cases} r, & {if( r \leq r_0)} \\ k\times r, & {if(r > r_0 \&\& r \leq r_1)} \\ r, & {if(r > r_1)} \end{cases} T(r)=r,k×r,r,if(rr0)if(r>r0&&rr

这篇关于OpenCV之灰度空间变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009946

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间