【Emgu.CV教程】4.2、无缝融合应用之IlluminationChange()函数去除高亮区域

news2024/9/20 1:14:40

        上一篇讲的是ColorChange()函数,今天讲IlluminationChange()函数,它可以去除图片中的高亮区域。试想一下,下面是一张反光背心的夜间照片,反光条颜色特别亮,如果想只把反光的部分变暗一点,其余部分不变,这时候就可以用到IlluminationChange()函数进行处理。

        函数的定义如下:

public static void IlluminationChange(
    IInputArray src, // 输入图像
    IInputArray mask, // 掩码图,单通道或者三通道都可以,非零部分不起作用
    IOutputArray dst,  // 输出图像
    float alpha = 0.2f, // 0 - 2之间,越大越接近原图细节
    float beta = 0.4f // 0 - 2之间,越大图片平滑越多
)

         用起来的代码如下:

Mat tempMat = srcMat.Clone(); // 深拷贝
Mat dstMat = new Mat();
Mat mask = new Mat();
int threshold = 200; // 掩码图阈值,越大越能提取出高亮区域.
float alpha = 0.3; // alpha越大,越接近原图细节,0-2之间.
float beta = 1.9; // beta越大,图片平滑越多,0-2之间.
CvInvoke.CvtColor(tempMat, mask, ColorConversion.Bgr2Gray);
CvInvoke.Threshold(mask, mask, threshold, 255, ThresholdType.Binary);
CvInvoke.IlluminationChange(tempMat, mask, dstMat, alpha, beta);
CvInvoke.Imshow("Mask, " + mask.Size.ToString(), mask);
CvInvoke.Imshow("IlluminationChange image, " + dstMat.Size.ToString(), dstMat);

        Threshold()这个函数已经讲过了,就是利用阈值,找到图片中白色的区域,代码中的阈值是200,也就是超过200的部分是变成纯白,其余部分是纯黑色,这就是一个mask掩码图。在原图中,只有掩码图里是白色的地方才会调整。alpha = 0.3,beta = 1.9,效果如下:

        是不是明亮的部分已经不那么刺眼了,这个函数用起来很简单,一共就三个变量可以调整,要多照几张图片试一试。要选局部有高光、并且高光部分的物体还是有纹理的。我在网上找了半天才找到这个反光背心的照片,效果还不是那么明显。

原创不易,请勿抄袭。共同进步,相互学习。  

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

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

相关文章

文字识别与光学字符识别有什么区别?

随着科技的不断发展,文字识别和光学字符识别技术已经成为我们日常生活和工作中不可或缺的一部分。然而,许多人对于这两者之间的区别并不十分清楚。本文将详细探讨文字识别与光学字符识别之间的差异,以帮助读者更好地理解这两种技术。 文字识…

【JUC】进程和线程

目录 📢什么是进程?🎡什么是线程?🚀进程和线程的区别?🎢Java 线程和操作系统的线程有啥区别?🎖️JDK21的虚拟线程🎯虚拟线程和平台线程的对比 📢什么是进程? 进程是程序的一次执…

Redis 过期删除策略

常见的三种过期删除策略: 定期删除;惰性删除;定时删除; 定期删除策略 每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。 定期删除的实现在 expire.c 文件下的 activeExpireCycle …

实现锚点定位功能(React/Vue)

前言 最近接到一个需求,修改某某页面,增加XXX功能,并实现个锚点功能。做产品就是不断优化,增加功能的过程。实现锚点的方式很多, 很多UI库也提供了组件,可以根据自己的需求调整一下组件库也可以实现&#…

HelpLook VS Zendesk:知识库工具的详细对比

在数字化飞速发展的时代,知识已成为企业最宝贵的资产。如何有效地管理和利用这些知识,提高企业的运营效率和创新能力,成为众多企业关注的焦点。而知识库工具成为了企业不可或缺的助手。 HelpLook和Zendesk是市场上两款备受关注的知识库工具&…

机器学习(四) -- 模型评估(4)

系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…

EF Core 在实际开发中,如何分层?

前言:什么是分层? 分层就是将 EF Core 放在单独的项目中,其它项目如 Asp.net core webapi 项目引用它这样的好处是解耦和项目职责的清晰划分,并且可以重用 EF Core 项目但是也会数据库迁移变得复杂起来 Step by step 步骤 创建一…

java常用应用程序编程接口(API)——String概述及使用案例

前言: 开始学到api的String,整理下心得。打好基础,daydayup! API: API是什么? API(Application Programming Interface)又名应用程序编程接口。是别人编好的程序的合集。 为什么要使用API&…

计算机基础面试题 |17.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

详解Java中的serialVersionUID概念以及作用(附上Demo)

目录 前言1. 概念2. Demo 前言 原本实现Serializable接口的时候一直都没有serialVersionUID属性,直到看到涉及MybatisPlus新项目中都有该属性,于是做了一期学习了解,最后发现该属性类似深度学习训练中的种子seed,类似版本控制&am…

RuntimeError: CUDA error: invalid device ordinal解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Vue.js设计与实现阅读2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别,前者关注过程,后者关注结果了解了虚拟dom存在的意义&#x…

[C#]winform部署yolov5-onnx模型

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 Yolov5,全称为You Only Look Once version 5,是计算机视觉领域目标检测算法的一个里程碑式模型。该模型由ultralytics团队开发,并因其简洁高效的特点而备受关注。Yol…

异常处理:全面覆盖与精细化管理的平衡

异常处理:全面覆盖与精细化管理的平衡 在软件开发中,异常处理是保证系统稳定性和用户体验的重要环节。对于是否应当全面覆盖所有异常并设立兜底机制,业界存在着两种主流思路:全面覆盖原则和精细化处理。如何在这两者间取得平衡&a…

嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

介绍了如何搭建在Linux开发板中搭建Qt的运行环境,并测试了Qt自带的例程。 本篇,来介绍如何自己编写一个Qt程序,并将编译结果放到Linux开发板中运行。 1 Windows上编写Qt程序 因为Qt是支持跨平台的,所以我们可以先在Windows平台…

一天一个设计模式---单例模式

概念 单例模式是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这意味着在应用程序中的任何地方,只能有一个实例存在,而不会创建多个相同类型的实例。 具体内容 单例模式通常包括以下几个要素…

深度学习:图神经网络——在推荐系统中的应用

PinSage是工业界应用图神经网络完成推荐任务的第一个成功案例,其从用户数据中构造图(graph)的方法和应对大规模图而采取的实现技巧都值得我们学习。PinSage被应用在图片推荐类Pinterest上。在Pinterest中,每个用户可以创建并命名图…

工程管理系统功能设计与实践:实现高效、透明的工程管理

在现代化的工程项目管理中,一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统,结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…

深入了解网络流量清洗--使用免费的雷池社区版进行防护

​ 随着网络攻击日益复杂,企业面临的网络安全挑战也在不断增加。在这个背景下,网络流量清洗成为了确保企业网络安全的关键技术。本文将探讨雷池社区版如何通过网络流量清洗技术,帮助企业有效应对网络威胁。 ![] 网络流量清洗的重要性&#x…

Wpf 使用 Prism 实战开发Day08

备忘录页面设计 1.效果图 一.布局设计跟第7章节一样&#xff0c;只是内容方面发生变化&#xff0c;其他样式都一样。直接把代码粘出来了 MemoView.xaml 页面代码 <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2…