opencv基础篇 ——(十一)常用照片处理函数

改善图像的亮度(illuminationChange)

        用于改善光照条件不佳导致的图像对比度低下或局部过暗/过亮的问题。该函数通过模拟全局和局部光照变化,旨在提高图像的整体视觉质量,特别是在低光照条件下,使得图像中的重要细节更加清晰可见。

函数原型

void cv::illuminationChange(
    InputArray src,
    OutputArray dst,
    float alpha = 0.2f,
    float beta = 0.4f
);

参数说明

  • src: 输入图像,通常为 cv::Mat 类型,表示待处理的灰度图像或彩色图像(BGR 或 RGB 格式)。如果输入的是彩色图像,内部会先将其转换为灰度图像进行处理。

  • dst: 输出图像,与输入图像 src 同样大小和类型。该图像存储经过光照变化增强后的结果。

  • alpha: 全局光照调整因子。它控制整体图像亮度的增益。取值范围通常为 0.0 到 1.0。较高的 alpha 值会使图像整体变得更亮,较低的 alpha 值则使图像整体变暗。

  • beta: 局部光照调整因子。它影响图像中对比度较低区域(暗区)的亮度提升程度。取值范围通常也是 0.0 到 1.0。较大的 beta 值会使暗区提亮得更多,较小的 beta 值则相对保守地提亮暗区。

函数工作原理

cv::illuminationChange() 函数执行以下基本步骤来实现光照变化增强:

  1. 图像预处理:如果输入是彩色图像,首先将其转换为灰度图像。

  2. 全局光照调整:对整个灰度图像应用线性变换,公式通常为 dst = src * alpha,其中 src 是原始灰度值,dst 是调整后的灰度值。这一步改变了图像的整体亮度。

  3. 局部对比度增强: a. 计算图像的局部自适应直方图均衡化(CLAHE),以增强局部对比度,特别是对于暗区。 b. 将增强后的局部对比度图像与原始图像进行融合,融合比例由 beta 参数控制。融合公式可能是 dst_local_enhanced = (1 - beta) * src + beta * clahe_output,其中 clahe_output 是局部对比度增强后的图像。 c. 对局部增强后的图像施加一定的阈值限制,防止过度提亮导致的失真。

  4. 合并全局和局部调整:将全局调整后的图像与局部对比度增强后的图像结合,通常采用加权平均或其他混合策略,以平衡全局亮度调整与局部对比度增强的效果。

  5. 输出结果:将最终处理后的像素值写入到输出图像 dst 中。如果是彩色输入,增强后的灰度图像会被转换回相应的彩色格式并写入 dst

应用场景

  • 低光照图像增强:在夜间监控、弱光摄影、医疗影像等领域,该函数可用于显著提升图像的可视性和细节表现。

  • 图像预处理:作为图像分析、目标检测、特征提取等计算机视觉任务的预处理步骤,改善光照条件有利于后续算法的性能。

  • 艺术效果:在图像编辑或创意应用中,可以利用该函数创建具有不同光照氛围的图像版本。

局部颜色更改(colorChange )

        用于改变图像中特定区域的颜色属性。该函数允许用户根据提供的掩模和指定的乘法系数来调整图像中红色、绿色和蓝色(RGB)分量的强度,从而实现局部或全局的颜色变化。

函数原型

void cv::colorChange(
    InputArray src,
    InputArray mask,
    OutputArray dst,
    float red_mul = 1.0f,
    float green_mul = 1.0f,
    float blue_mul = 1.0f
);

参数说明

  • src: 输入图像,通常为 cv::Mat 类型,表示待处理的彩色图像(BGR 或 RGB 格式)。

  • mask: 输入掩模图像,同样为 cv::Mat 类型。非零像素(通常设置为白色)标识出需要进行颜色调整的区域。掩模外的区域将保持原样。

  • dst: 输出图像,与输入图像 src 同样大小和类型。该图像存储经过颜色调整后的结果。

  • red_mul: 红色分量乘法系数。取值范围通常为 0.0 到 无穷大。大于 1.0 的值会使红色分量增强,小于 1.0 的值会使红色分量减弱,而等于 1.0 则保持红色分量不变。

  • green_mul: 绿色分量乘法系数。含义和取值范围与 red_mul 相同,用于调整绿色分量的强度。

  • blue_mul: 蓝色分量乘法系数。含义和取值范围与 red_mul 相同,用于调整蓝色分量的强度。

函数工作原理

cv::colorChange() 函数执行以下基本步骤来实现颜色调整:

  1. 掩模应用:根据提供的掩模图像,确定哪些像素需要进行颜色调整。掩模中的非零像素(有效区域)将进行后续的颜色操作,而零像素(无效区域)将保持原样。

  2. 颜色分量调整:对于掩模内的每个像素,分别对其 BGR 或 RGB 三个颜色分量进行乘法操作。具体来说,将每个分量值乘以其对应的乘法系数 (red_mulgreen_mulblue_mul)。这样可以增加或减少相应颜色成分的强度。

  3. 颜色空间转换(如果必要):如果输入图像为 RGB 格式,内部会将其转换为 OpenCV 默认的 BGR 格式进行处理,然后再将结果转换回 RGB 格式。

  4. 输出结果:将调整后的像素值写入到输出图像 dst 中,未被掩模覆盖的区域保持与 src 相同。

应用场景

  • 色彩校正:在拍摄过程中由于光照条件、相机设置等因素导致的色彩偏差,可以使用该函数对选定区域进行针对性的颜色调整,以达到更准确的色彩还原。

  • 图像风格化:在艺术创作或特效制作中,通过改变局部或全局的颜色属性,可以实现各种风格化的图像效果。

  • 图像融合:在图像拼接、无缝克隆等任务中,可以使用该函数对融合区域的颜色进行匹配,以减少接缝处的视觉突变。

图像融合(seamlessClone)

        用于图像合成的一个高级函数,它能够将源图像(src)中的内容无缝地插入到目标图像(dst)的指定位置,同时考虑源图像与目标图像周围环境的色彩、纹理和光照一致性,生成自然、无明显拼接痕迹的结果。

函数原型

void cv::seamlessClone(
    InputArray src,
    InputArray dst,
    InputArray mask,
    Point p,
    OutputArray blend,
    int flags
);

参数说明

  • src: 输入图像,通常为 cv::Mat 类型,表示待插入的源图像(例如,一个物体、人物或图标),通常是彩色图像(BGR 或 RGB 格式)。

  • dst: 输入图像,同样为 cv::Mat 类型,表示接收源图像的目标图像背景。源图像将被无缝地插入到该图像的指定位置。

  • mask: 输入掩模图像,为单通道 cv::Mat 类型,表示源图像中需要插入的目标区域。掩模中的非零像素(通常设置为白色)对应于源图像中需要克隆的部分,零像素(通常为黑色)则表示不需要克隆的区域。

  • pcv::Point 类型,指定源图像在目标图像中的插入位置。这个点对应于掩模图像中非零区域的左上角坐标(即源图像的左上角在目标图像中的位置)。

  • blend: 输出图像,与输入图像 src 和 dst 同样大小和类型。该图像存储经过无缝克隆处理后的结果。

  • flags: 克隆类型的标志,用于指定克隆算法的类型。支持以下两种模式:

    • cv::NORMAL_CLONE: 正常克隆模式,适用于大多数情况。该模式尝试保持源图像与目标图像之间色彩、纹理和光照的一致性,生成较为自然的融合效果。

    • cv::MIXED_CLONE: 混合克隆模式,适用于源图像与目标图像之间存在较大差异或需要产生特定艺术效果的情况。这种模式会在保持源图像主要特征的同时,适度吸收目标图像的纹理信息,生成更具创意性的融合结果。

函数工作原理

cv::seamlessClone() 函数执行以下基本步骤来实现无缝图像克隆:

  1. 掩模应用:根据提供的掩模图像,确定源图像中哪些部分需要克隆到目标图像。

  2. 色彩、纹理和光照分析:对源图像、目标图像以及目标图像中源图像插入位置周围的环境进行色彩、纹理和光照特性分析。

  3. 像素级融合:根据所选的克隆模式(flags 参数),对源图像与目标图像在插入位置及其附近的像素进行逐个融合。融合过程中,考虑源图像与周围环境的色彩、纹理和光照一致性,生成自然过渡的像素值。

  4. 输出结果:将无缝克隆后的像素值写入到输出图像 blend 中,未被掩模覆盖的区域保持与 dst 相同。

应用场景

  • 图像编辑与合成:在图像处理软件中,用于实现物体的移除、添加或替换,创建视觉上连贯的合成图像。

  • 艺术创作:通过无缝克隆,可以创造出超现实主义、梦幻或幽默的艺术作品,将原本不相关的元素融合到同一场景中。

  • 广告设计与特效制作:在电影、电视或数字广告中,无缝克隆技术常用于实现逼真的场景拼接、物体植入等特效。

去除纹理信息(textureFlattening)

        用于从输入图像中去除纹理信息,从而实现对图像背景或特定区域进行平滑处理。该函数有助于凸显图像中的主要结构和形状,同时消除或减弱不相关的纹理细节,这对于许多计算机视觉应用如物体检测、图像分割、特征提取等场景非常有用。

函数原型

void cv::textureFlattening(
    InputArray src,
    InputArray mask,
    OutputArray dst,
    float low_threshold = 30, 
    float high_threshold = 45,
    int kernel_size = 3
);

参数说明

  • src: 输入图像,通常为 cv::Mat 类型,表示待处理的彩色图像(通常为三通道 BGR 或 RGB 格式)。

  • mask: 输入掩模图像,同样为 cv::Mat 类型。非零像素(通常设置为白色)标识出需要进行纹理平滑处理的区域。掩模外的区域将保持原样。

  • dst: 输出图像,与输入图像 src 同样大小和类型。该图像存储经过纹理平滑处理后的结果。

  • low_threshold: 低阈值,用于初步筛选出可能包含纹理的像素。低于此阈值的像素被认为是具有低纹理强度,更有可能被平滑。

  • high_threshold: 高阈值,与低阈值配合使用。高于低阈值但低于高阈值的像素被认为具有中等纹理强度,可能参与后续的平滑处理。

  • kernel_size: 卷积核大小,用于定义计算局部纹理强度时使用的邻域大小。通常选择奇数以确保中心像素的存在。较大的 kernel_size 可能会更有效地去除纹理,但也可能导致边缘模糊。

函数工作原理

cv::textureFlattening() 函数执行以下基本步骤来实现纹理平滑:

  1. 计算局部纹理强度:对于掩模内每个像素,计算其邻域内像素颜色值的差异,形成一个局部差异矩阵。使用指定的卷积核大小和距离度量(默认为 L2 距离或指定的 Hamming 距离)计算该矩阵的纹理强度指标。

  2. 阈值化处理:将计算得到的纹理强度与给定的低阈值和高阈值进行比较。低于低阈值的像素被认为几乎没有纹理,直接采用掩模区域的平均颜色替换;高于高阈值的像素则保留原样,认为它们属于主要结构或边缘。处于两者之间的像素根据某种策略(如加权平均)进行平滑处理。

  3. 输出结果:将处理后的像素值写入到输出图像 dst 中,未被掩模覆盖的区域保持与 src 相同。

应用场景

  • 背景平滑:在监控视频流中,可以使用 cv::textureFlattening() 去除动态背景中的复杂纹理,以便更好地突出前景对象。

  • 文档图像预处理:对于扫描的文档图像,平滑背景纹理有助于减少噪声,提升 OCR(光学字符识别)的准确性。

  • 医学图像分析:在皮肤病变检测、细胞显微图像分析等场景中,平滑无关纹理有助于集中分析主要结构特征。

  • 艺术效果:在图像编辑或创意应用中,可以利用该函数创建独特的平滑或油画般的效果。

效果展示

  • 消除高光

  • 改变花朵颜色

  • 图片融合

去除纹理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于python的舞蹈经验分享交流网站django+vue

1.运行环境:python3.7/python3.8。 2.IDE环境:pycharmmysql5.7/8.0; 3.数据库工具:Navicat11 4.硬件环境:windows11/10 8G内存以上 5.数据库:MySql 5.7/8.0版本; 运行成功后,在浏览器中输入&am…

什么牌子内衣洗衣机好用?五种高性价比单品一览

随着科技的进步和消费者对生活质量的要求越来越高,很多小家电被发明出来,其中讨论热度较高是内衣洗衣机。它不仅方便快捷,还能保持衣物清洁和卫生。不过现在市面上的内衣洗衣机品牌实在太多了,在选购的时候让人很犹豫,…

日本一站式软文发稿:开启你的日本市场之旅

在当今的业界里,软文发稿已经成为一种被广泛采用的营销策略。不同于硬广告的直接推销,软文发稿注重以讲故事,提供有价值的信息,借此影响和吸引读者,从而间接推广企业的产品和服务。 相对于其它地区,日本市…

单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

目录 1、前言 ​ 2、程序 资料下载地址:单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释 1、前言 系统组成:STC89C52RCLcd1602蜂鸣器按键 具体介绍: Lcd1602排队叫号系统,有取号显示窗和叫号显示窗…

解决clickhouse 启动报错

解决clickhouse 启动报错 Error response from daemon: driver failed programming external connectivity on endpoint clickhouse-server (b42457434cebe7d8ad024d31e4fd28eae2139bb2b5046c283bea17ce4398d5b0): Error starting userland proxy: listen tcp4 0.0.0.0:8123: …

MySQL中怎么存放一条记录

2.2.1. MySQL中一行记录是怎么存储的? MySQL的数据存储在那个文件? 每创建一个 database(数据库)都会在 /var/lib/mysql/ 目录里面创建一个以 database 为名的目录,然后保存表结构和表数据的文件都会存放在这个目录里…

【软件工程与实践】(第四版)第7章习题答案详解

写在文章开头,感谢你的支持与关注!小卓不羁 第7章 一、填空题二、选择题三、简答题四、实践题 一、填空题 (1)发现软件的错误 (2)白盒法 系统的模块功能规格说明 (3)功能 &#xf…

如何用揿针治疗慢性咽炎?

点击文末领取揿针的视频教程跟直播讲解 在日常生活中,慢性咽炎极为常见,不致命却很恼人。一旦发作,你的喉咙每天都会不舒服,总感觉有东西堵着,但是呢,咳又咳不出来,咽也咽不下去,你…

在一台交换机上配置VLAN

实验环境 实验拓扑图结构如图12.12所示,其中PC1和PC3属于VLAN 2,PC2属于 VLAN 3,PC1的IP地址为192.168.0.2/24,PC2的IP地址为192.168.1.2/24,PC3的 IP地址为192.168.0.3/24。 图12.12 需求描述 要求处于相同VLAN中的主…

JavaScript运算符及优先级全攻略,点击立刻升级你的编程水平!

在编程的世界里,运算符是构建逻辑、实现功能的重要工具。它能帮助我们完成各种复杂的计算和操作。 今天,我们就来深入探索JavaScript中运算符的奥秘,掌握它们的种类和优先级,让你的代码更加高效、简洁! 一、什么是运…

C# Web控件与数据感应之 CheckBoxList 类

目录 关于数据感应 CheckBoxList 类 范例运行环境 数据源表设计 角色字典表 用户角色表 AutoValueDBList 方法 原理 设计 实现 调用示例 初始化数据 启动查询模式 使用保存模式 小结 关于数据感应 数据感应也即数据捆绑,是一种动态的,We…

【氮化镓】一种新型的p-GaN/p-AlGaN/AlGaN/GaN异质结场效应晶体管

文章由韩国首尔弘益大学电子与电气工程学院的Dong-Guk Kim等人撰写,题为“P-GaN/p-AlGaN/AlGaN/GaN heterojunction field-effect transistor with a threshold voltage of 6 V”,发表在IEEE Electron Device Letters上。文章提出了一种新型的p-GaN/p-Al…

HTTP:强缓存优化实践

强缓存:浏览器不会向服务器发送任何请求,直接从本地缓存中读取文件 强缓存是指浏览器在向服务器请求资源时,判断本地是否存在该资源的缓存,并判断是否过期。 如果本地缓存未过期,浏览器就直接使用本地缓存&#xff0c…

C#基础|了解对象在程序中的状态及垃圾回收机制

哈喽,你好啊,我是雷工! 本节了解对象的生命周期及对象状态和垃圾回收机制,以下为学习笔记。 1、对象的生命周期 对象在内存中不断地被引用,被释放,形成了类似生命周期的过程。 2、对象在内存中的状态 对…

【2024新windows电脑部署测试环境系列】Jenkins部署 (上)

jenkins对我们测试来说挺重要的,持续集成cicd ,定时任务,远程控制,打包部署测试环境等等。虽然在一些公司,早已用上自研的这种综合控制平台,不过也至少9成以上的组织还是在用jenkins。 一个公司并不一定只有一个jenkin…

一文解决ArcGIS生成点和管段 含案例讲解

背景 在工作中,我们经常遇到要将坐标数据导入 GIS,生成点位,若是地理坐标系(经纬度),那么直接用 arcgis或者QGIS 导入数据就行了,可实际中总会遇到各种问题: 坐标数据集为大地 200…

(三十二)第 5 章 数组和广义表(稀疏矩阵的十字链表存储表示实现)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

latex使用bib引用参考文献时,正文编号顺序乱序解决办法,两分钟搞定!

一、背景 用Latex写文章时&#xff0c;使用bib添加参考文献是一种最为简便的方式。但有的期刊模板&#xff0c;如机器人顶会IROS&#xff0c;会出现正文参考文献序号没按顺序排列的情况&#xff0c;如下图所示。按理说文献[4]应该是文献[2]&#xff0c;[2]应该是[3]&#xff0…

现代机器学习(ML)技术在医疗成像领域的新应用

现代机器学习(ML)技术在医疗成像领域的新应用主要包括以下几个方面: 一、自动病变检测 使用深度学习算法,尤其是卷积神经网络(CNN),自动识别和分类医学影像中的病变,如肿瘤、炎症等。自动病变检测是现代机器学习技术在医疗成像领域应用的一个重要方向。它主要通过以下…

spark实验求TOP值

实验1&#xff1a;求TOP值 已知存在两个文本文件&#xff0c;file1.txt和file2.txt&#xff0c;内容分别如下&#xff1a; file1.txt 1,1768,50,155 2,1218, 600,211 3,2239,788,242 4,3101,28,599 5,4899,290,129 6,3110,54,1201 7,4436,259,877 8,2369,7890,27 fil…
最新文章