【Emgu.CV教程】4.1、无缝融合应用之ColorChange()函数

news2024/9/19 10:44:08

        按照网上专业一些的教程,接下来应该讲讲图像平滑、直方图,但是我前面刚讲完色彩处理,突然又发现了一个无缝融合的应用,也可以改颜色的,索性就先把它讲了,包括四个函数,反正这四个函数在具体工程项目上的实际意义都没有后面的平滑、直方图重要,主打的就是一个好玩,类似于PhotoShop中的某些特效。

       无缝融合的应用,按照Emgu.CV的源头----OpenCV的叫法,是属于Seamless Cloning这一部分,看这个网址有介绍:

OpenCV: Seamless Cloning

       Emgu.CV也保留了这一部分,今天先讲ColorChange()函数,它可以改变指定目标区域的颜色,函数是这样定义的:

public static void ColorChange (
    IInputArray src, // 输入图像
    IInputArray mask, // 掩码图,单通道或者三通道都可以,非零部分不起作用
    IOutputArray dst, // 输出图像
    float redMul = 1f, // 红色通道乘积因子(建议值0.5~2.5)
    float greenMul = 1f, // 绿色通道乘积因子(建议值0.5~2.5)
    float blueMul = 1f // 蓝色通道乘积因子(建议值0.5~2.5)
)

       这个函数使用起来也很简单,首先选取要改变颜色的区域,生成一个和原图像尺寸相同的掩码图,再利用redMul、greenMul 、blueMul 三个参数,就可以改变图像的颜色了。以一张青红苹果图片为例,通过设定能将青苹果包住ROI,生成掩码图,再改变三个通道的乘积因子,就能将青苹果改成你想要的颜色,如下图:

       代码很简单,WPF里面用了四个文本框代表ROI的位置大小,三个Slider实现乘积因子值选择,代码如下:

Mat tempMat = srcMat.Clone(); // 深拷贝
Mat dstMat = new Mat();
Rectangle rect = new Rectangle(Convert.ToInt32(TextBoxX.Text.Trim().ToString()), Convert.ToInt32(TextBoxY.Text.Trim().ToString()), Convert.ToInt32(TextBoxWidth.Text.Trim().ToString()), Convert.ToInt32(TextBoxHeight.Text.Trim().ToString()));
Mat mask = Mat.Zeros(tempMat.Height, tempMat.Width, DepthType.Cv8U, 3);
CvInvoke.Rectangle(mask, rect, new MCvScalar(255, 255, 255), -1, LineType.EightConnected, 0); // thickness = -1,代表实心
float redMul = Convert.ToSingle(Slider1.Value); // 红色通道乘积因子(建议值0.5~2.5)
float greenMul = Convert.ToSingle(Slider2.Value); // 绿色通道乘积因子(建议值0.5~2.5)
float blueMul = Convert.ToSingle(Slider3.Value); // 蓝色通道乘积因子(建议值0.5~2.5)
CvInvoke.ColorChange(tempMat, mask, dstMat, redMul, greenMul, blueMul);
CvInvoke.Rectangle(dstMat, rect, new MCvScalar(255, 255, 255), 1, LineType.EightConnected, 0);
CvInvoke.Imshow("Mask, " + mask.Size.ToString(), mask);
CvInvoke.Imshow("ColorChange image, " + dstMat.Size.ToString(), dstMat);

       再如下面这个图,通过增大绿色通道因子值,把西瓜瓤变色的演示。 

        注意哈,在Emgu.CV中,如果是白色背景的图, ColorChange()函数的使用效果好像不太好,OpenCV里有没有这个问题我还真不知道,比如下面这个图,读者们可以自己试试改变红苹果的颜色,反正我这里是颜色改变的有些乱套。

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

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

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

相关文章

Hyperledger Fabric 自动发现网络信息 discover 工具使用

客户端要往 Fabric 网络中发送请求,首先需要知道网络的相关信息,如网络中成员组织信息、背书节点的地址、链码安装信息等。 在 Fabric v1.2.0 版本之前,这些信息需要调用者手动指定,容易出错;另外,当网络中…

.NET 6中如何使用Redis

1、安装redis Redis在windows平台上不受官方支持,所以想要在window安装Redis就必须去下载windows提供的安装包。安装地址:https://github.com/tporadowski/redis/releases 2、在NueGet安装包 3、在appsettings.json文件里面添加Redis相关配置信息 &quo…

C#之反编译之路(二)

先阅读C#之反编译之路(一)可以增加文章连续性 阅读C#之反编译之路(一) 如何快速定位代码位置 用一个小小的例子举例,用户反馈新能源车牌号无法录入,燃油车牌正常,查看日志报如下错误 拿到关键字车牌号长度错误直接反编译代码 打开dnSpy.exe→加载项目→CtrlF打开搜索框→输入…

CentOS7本地部署分布式开源监控系统Zabbix并结合内网穿透实现远程访问

前言 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 本地zabbix web管理界面限制在只能局域…

spring-boot项目启动类错误: 找不到或无法加载主类 com.**Application

问题:Springboot项目启动报错:错误: 找不到或无法加载主类 com.**Application 解决步骤: 1.File–>Project Structure 2.Modules–>选中你的项目–点击“-”移除 3.重新导入:点击“”号,选择Import Module&…

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

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

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

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

【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…