【Emgu.CV教程】4.4、无缝融合应用之TextureFlattening()纹理扁平化

news2025/1/11 21:07:06

        这是无缝融合应用的最后一篇,TextureFlattening()函数,专门用于对图像指定部位进行纹理扁平化的。这个功能现在讲起来有点太早了,应该放到《图像的空间滤波--平滑》这一章节中才合适。因为它就是用Sobel算子进行平滑,也就是在保留图像纹理的情况下,去掉噪点,主要用于图像分割使用。现在不理解不要紧,看看函数是怎么用的就会了。

        函数定义如下:

public static void TextureFlattening(
    IInputArray src, // 输入图像
    IInputArray mask, // 掩码图,单通道或者三通道都可以,非零部分不起作用
    IOutputArray dst, // 输出图像
    float lowThreshold = 30f, // Canny边缘检测器低阈值(建议取值0~100)
    float highThreshold = 45f, // Canny边缘检测器高阈值(建议取值>100)
    int kernelSize = 3 // Sobel算子核大小,只能是3、5、7,默认3
)

        注意啊,函数一定要有个掩码图,尺寸和原图要相同,我这里举例的掩码图是中间的那部分矩形区域为白色,其余全部是0。原图和掩码图如下:

        假定lowThreshold = 30 ,highThreshold = 140,kernelSize = 7,执行以下代码:

Mat tempMat = srcMat.Clone(); // 深拷贝
Mat dstMat = new Mat();
Mat mask = new Mat();
float lowThreshold = 30;
float highThreshold = 140;
int kernelSize = 7; 
Rectangle rect = new Rectangle(tempMat.Width / 4, tempMat.Height / 4, tempMat.Width / 2, tempMat.Height / 2);
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,代表实心
CvInvoke.TextureFlattening(tempMat, mask, dstMat, lowThreshold, highThreshold, kernelSize);
CvInvoke.Imshow("TextureFlattening image, " + dstMat.Size.ToString(), dstMat);

        这时候用 Imshow()函数显示出来的结果图像,变成了这样:

       中间的那部分,就是被平滑了。代码和参数不变,换成另外一张图像呢,看一下效果:

        这个函数是用于图像平滑处理的,后面专门有一大章节是讲平滑的,还会有很多的类似函数。但是在讲平滑之前,下面一大章先讲一下图像的几何变换,这个更基础一些,预计下周隆重登场。

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

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

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

相关文章

uniapp使用wxml-to-canvas开发小程序保存canvas图片

微信小程序官方解决方案:wxml-to-canvas 使用wxml-to-canvas要知道一些前提条件 1、只能画view,text,image 2、每个元素必须要设置宽高 3、默认是flex布局,可以通过flexDirection: "column"来改变排列方式 4、文字 必…

复试 || 就业day14(2024.01.10)算法篇

文章目录 前言字符串中第二大的数字字符串中不同整数的数目判断句子是否为全字母句长度为三且各字符不同的子字符串检查是否区域内所有整数都被覆盖*重新分配字符使所有字符串都相等可以输入的最大单词数检查是否所有字符出现次数相同差的绝对值为 K 的数对数目至少在两个数组中…

PHP开发日志 ━━ php8.3安装与使用组件Xdebug

今天开头写点历史: 二十年前流行asp,当时用vb整合常用函数库写了一个dll给asp调用,并在此基础上开发一套仿windows界面的后台管理系统;后来asp逐渐没落,于是在十多年前转投php,不久后用php写了一套mvc框架&…

压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

原理 变换的选择是一个关键的考量因素,它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则: 数据去关联性:变换的目的之一是减少数据中的相关性。例如,在图像压缩中,像素间往往高度相关。通过适当的变换&a…

Redis-Cluster 与 Redis 集群的技术大比拼

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Redis-Cluster 与 Redis 集群的技术大比拼 前言概念与原理对比Redis-Cluster:基于哈希槽的分布式解决方案传统 Redis 集群:主从架构下的数据分片方式 搭建与配置的异同Redis-Cl…

跟着小德学C++之进程信息记录

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…

JS逆向之加密参数定位

文章目录 前言加密参数的处理步骤加密参数的定位方法搜索断点XHR断点DOM断点EVENT断点 hook 前言 当我们对网络请求进行抓包分析之后,需要用开发者工具对加密参数进行全局搜索。当搜索不到加密参数的时候,应该采取什么解决方法去定位。 还有一个应用场…

Tomcat-快速使用

关于Tomcat的概念及来由在Tomcat基本知识中进行了介绍,下面我们直接上手快速使用起来。 一、快速使用 (1)tomcat下载 (2)解压缩 (3)启动程序 (4)访问tomcat&#xff1a…

Windows和Linux中检查端口是否被占用

一、windows 1、查询端口占用情况 cmd > netstat -ano 2、查询8080端口是否被占用 cmd > netstat -ano|findstr 8080 3、查询哪个程序占用了端口 cmd > tasklist|findstr PID 4、终止该占用进程 cmd > ntsd -c q -p PID 二、Linux 1、查询8080端口是否被占用…

windows10 装docker和docker compose

一.windows环境准备 开启过程中的问题,进入bios修复 二.docker下载安装 1.下载 Docker Desktop: The #1 Containerization Tool for Developers | Docker 下载最新版有问题,下载老版本试试 Docker Desktop release notes | Docker Docs 2.安装 三.do…

GitHub pull request(傻瓜式入门版)

基础入门版 pull request一、fork项目二、clone代码到本地三、进入到克隆的项目目录下四、列出所有分支五、创建一个本地分支,并追踪远程项目分支六、查看当前分支七、与远程仓库建立连接八、与上游仓库建立连接八、同步最新代码九、修改代码并提交十、提交pr pull …

虚幻引擎:开创视觉与创意的新纪元

先看看据说虚幻5做出来的东西吧: 虚幻引擎5!!!4K画质PS5实机演示! 好了,用文字认识一下吧: 虚幻引擎5.3对UE5的核心工具集作了进一步优化,涉及渲染、世界构建、程序化内容生成&…

服务器执行rm命令时自动记录到审计日志中

目的 当在服务器上执行类似于 rm 命令时,自动记录该命令执行的时间,在哪里执行的,删除的什么文件,记录到审计日志中,能够查找到某些文件丢失原因 配置 # 需要root权限,sudo不行,这里假设执行…

麦芯(MachCore)开发教程1 --- 设备软件中间件

黄国强 2024/1/10 acloud163.com 对任何公司来说,在短时间内开发一款高质量设备专用软件,是一件不太容易做到的事情。麦芯是笔者发明的一款设备软件中间件产品。麦芯致力于给设备厂商提供一个开发工具和平台,让客户快速高效的开发自己的设备专…

PyQt5零基础入门(二)——QLabel控件

前言 QLabel控件可以视为是一个标签项,具有显示文本、图像的作用。在本篇文章中将介绍QLabel控件的常见用法。 例子 显示文本 import sys from PyQt5.QtWidgets import *if __name__ "__main__":app QApplication([])label QLabel(Hello world!)la…

了解结构体以及结构体数组

C语言的结构体你真的了解吗? 一起来看一下吧!!! 1.结构体是啥? 结构体是多种数据类型的组合体 2.格式(一般放在主函数前,也就是int main()前面 ) 关键字 结构体名字 {成员列表…

网络安全B模块(笔记详解)- Web信息收集

Web信息收集 1.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,查看该命令的完整帮助文件),并将该操作使用命令中固定不变的字符串作为Flag提交; Flag:nikto -H 2.通过Kali对服务器场景Linux进行Web扫描渗透测试(使用工具nikto,扫描目标服务器8080端口,…

springCould中的Bus-从小白开始【11】

目录 🧂1.Bus是什么❤️❤️❤️ 🌭2.什么是总线❤️❤️❤️ 🥓3.rabbitmq❤️❤️❤️ 🥞4.新建模块3366❤️❤️❤️ 🍳5.设计思想 ❤️❤️❤️ 🍿6.添加消息总线的支持❤️❤️❤️ &#x1f9…

Redis不同环境缓存同一条数据,数据内部值不同

背景 现实中,本地环境(dev)和开发环境(feature)会共同使用相同的中间件(本篇拿Redis举例),对于不同环境中的,图片、视频、语音等资源类型的预览地址url,需要配…

Ncast盈可视 高清智能录播系统 IPSetup.php信息泄露+RCE漏洞复现(CVE-2024-0305)

0x01 产品简介 Ncast盈可视 高清智能录播系统是广州盈可视电子科技有限公司一种先进的音视频录制和播放解决方案,旨在提供高质量、高清定制的录播体验。该系统采用先进的摄像和音频技术,结合强大的软件平台,可以实现高清视频录制、多路音频采集、实时切换和混音、定制视频分…