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.mzph.cn/web/8932.shtml

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

相关文章

IDEA Maven项目,控制台出现乱码的问题

前言 使用idea进行maven项目的编译时,控制台输出中文的时候出现乱码的情况。 通常出现这样的问题,都是因为编码格式不一样导致的。既然是maven出的问题,我们在idea中查找下看可以如何设置文件编码。 第一种方式 在pom.xml文件中&#xff…

nginx--系统参数优化telenct

系统参数 在生产环境中,根据自己的需求在/etc/sysctl.conf来更改内核参数 net.ipv4.ip_nonlocal_bind 1 允许非本地IP地址socket监听 net.ipv4.ip_forward 1 开启IPv4转发 net.ipv4.tcp_timestamps 0 是否开启数据包时间戳 net.ipv4.tcp_tw_reuse 0 端⼝口复⽤…

企业外贸邮箱有哪些?国内五大外贸邮箱排行榜

外贸公司在进行跨国业务的时候,需要一个稳定安全的企业邮箱。国内的企业外贸邮箱提供商有很多,目前排行在前五的有Zoho Mail企业邮箱、阿里企业邮箱、网易企业邮箱、腾讯企业邮箱、新浪企业邮箱,今天我们就来详细了解下这些邮箱产品。 一、Z…

【yolov8 项目打包】pyinstaller 打包pyQt5 界面为exe

创建一篇博客文章,介绍如何使用PyInstaller将PyQt5界面打包为exe文件,并且处理与YOLOv8模型相关的文件,可以按照以下结构进行: 标题:使用PyInstaller将PyQt5界面与YOLOv8模型打包为Windows可执行文件 引言 在机器学习…

Unity Material(材质)、Texture(纹理)、Shader(着色器)简介

文章目录 一、概念二、Rendering Mode三、Main Maps三、参考文章 一、概念 Material(材质):物体的“色彩”、“纹理”、“光滑度”、“透明度”、“反射率”、“折射率”、“发光度”等,材质的本质是shader的实例(载体)Texture(贴图):附件到…

Python通过定义类实现增删改查(期末考试)

python高级编程期末测试 别看我挣的少,但是我省的多,昨天法拉利又省下两百多万。 一、通过创建自己类来实现增删改查 我们已经利用模型实现单表的增删改查了 现在 我们不想使用模型来操作数据库 我们可以自己定义模型 那么 如何通过自己创建的类实现增…

计算机SCI期刊,IF=9.657,1区TOP,2周内出版!

一、期刊名称 Neural Networks 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:7.8 中科院分区:1区TOP 出版方式:订阅模式/开放出版 版面费:选择开放出版需支付$3350 三、期刊简介 神…

美国原装二手keysight86122c安捷伦86122C波长计

是德KEYSIGHT 86122C 波长计 主要功能和规格 特征: 增强型,稳定的HeNe参考激光器,使用寿命更长 包括五年保修,涵盖整个仪器,所有零件 绝对波长精度:0.2 ppm 差分波长精度:0.15 ppm 不到0.…

Springboot+vue项目影城管理系统

摘 要 本论文主要论述了如何使用JAVA语言开发一个影城管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述影城管理系统的当前背景以及系统开发的目的&…

正点原子Linux学习笔记(六)在 LCD 上显示 jpeg 图像

在 LCD 上显示 jpeg 图像 20.1 JPEG 简介20.2 libjpeg 简介20.3 libjpeg 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 20.4 libjpeg 使用说明错误处理创建解码对象设置数据源读取 jpeg 文件的头信息设置解码处理参数开始解码读取数据结束解码释放/销毁解码对象 …

【动态规划】子数组、子串系列I|最大子数组和|环形子数组的最大和|乘积最大子数组|乘积为正数的最长子数组长度

一、最大子数组和 最大子数组和 算法原理: 💡细节: 1.返回值为dp表每个位置的最大值,而不是只看最后一个位置,因为可能最后一个位置都不选 2.可以直接在填dp表的时候就进行返回值的比较 3.如果初始化选择多开一个位…

2024最新版JavaScript逆向爬虫教程-------基础篇之无限debugger的原理与绕过

目录 一、无限debugger的原理与绕过1.1 案例介绍1.2 实现原理1.3 绕过debugger方法1.3.1 禁用所有断点1.3.2 禁用局部断点1.3.3 替换文件1.3.4 函数置空与hook 二、补充2.1 改写JavaScript文件2.2 浏览器开发者工具中出现的VM开头的JS文件是什么? 一、无限debugger的…

520送男士内裤给男朋友好吗?五大男士内裤测评种草

相信有很多朋友都选在520这个特殊的日子里为心爱的人挑选一份特别的礼物吧!如果送礼给男朋友或老公,一份实用的礼物肯定是最佳选择哦!很多男性朋友每条内裤都穿很久,如果给男朋友挑选合适的男士内裤,也是一种关心体贴的…

[华为OD]BFS C卷 200 智能驾驶

题目: 有一辆汽车需要从m*n的地图的左上角(起点)开往地图的右下角(终点),去往每一个地区都需 要消耗一定的油量,加油站可进行加油 请你计算汽车确保从起点到达终点时所需的最少初始油量说明: (1)智能汽车可以上下左右四个方向…

C++ 复习2 输入输出 基本数据类型

输入输出 标准输出流 ( cout ) cout 代表标准输出流&#xff0c;通常用于向屏幕输出数据。 使用操作符 << &#xff08;插入操作符&#xff09;向 cout 发送数据。 例如&#xff0c; std::cout << "Hello, world!" << std::endl; 会在屏幕上打印 …

本地搭建AI环境

本地搭建AI 这几天刚刚看到好兄弟分享的一段关于本地搭建AI的短视频&#xff0c;于是我按照视频里的讲解&#xff0c;进行了实践。感觉非常棒&#xff01;&#xff01;&#xff0c;马上整理成文字与大家分享一下。 在本地启动并运行大型语言模型&#xff0c;运行llama3、phi3…

自然语言处理(NLP)技术有哪些运用?

目录 一、自然语言处理&#xff08;NLP&#xff09;技术有哪些运用&#xff1f; 二、Python进行文本的情感分析 1、NLTK库: 2、TextBlob库: 三、错误排除 一、自然语言处理&#xff08;NLP&#xff09;技术有哪些运用&#xff1f; 自然语言处理&#xff08;NLP&#xff09…

区块链 | NFT 水印:Review on Watermarking Techniques(一)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为&#xff1a; 可见 v i s i b l e \mathsf{visible} visi…

循环神经网络(RNN)

大家好&#xff0c;这里是七七&#xff0c;这两天在写关于神经网络相关的知识&#xff0c;面对的是有一定基础的读者哦。 一、RNN核心思想 RNN的核心思想就是曾经的输入造成的影响&#xff0c;会以致影响之后的输入&#xff0c;即隐含层的输出取决于历史数据的全部输入。 三个…

Infuse for Mac激活版:高清影音播放软件

对于热爱影音娱乐的Mac用户来说&#xff0c;Infuse for Mac是一个不容错过的选择。它以其简洁的操作界面和强大的播放功能&#xff0c;为用户带来了全新的影音播放体验。 Infuse for Mac支持广泛的音视频格式&#xff0c;无需额外转换&#xff0c;即可轻松播放您喜爱的影片。无…