【Emgu.CV教程】4.3、无缝融合应用之SeamlessClone()

        SeamlessClone()函数才是真正的无缝克隆,它可以将一张小一点的图片,复制到另一张大一点的图片中,并且复制的位置可以用户自己定义,先看一下它的函数介绍:

public static void SeamlessClone(
    IInputArray src, // 输入图像,小一点的目标图像
    IInputArray dst,// 输出图像,大一点的背景图
    IInputArray mask, // 掩码图,单通道或者三通道都可以,非零部分不起作用
    Point p, // 小一点的目标图像的中心在背景图像上的坐标
    IOutputArray blend,  // 输出图像
    CloningMethod flags // 融合方式,有Normal、MonochromeTransfer、Mixed三种
)

        假如说我们有一张尺寸比较小的擎天柱的图片,还有一个尺寸比较大的《金刚》电影海报,想把擎天柱拷贝到 《金刚》电影海报中去,就可以使用SeamlessClone()函数。

         定义参数:tMat = 擎天柱.jpg,bMat = 《金刚》海报.jpg,CloningMethod  = Normal,使用如下代码:

Mat tMat = targetMat.Clone();
Mat bMat = backgroundMat.Clone();
Mat dstMat = new Mat();

// 1、创建一个与目标图像尺寸相同的白色掩码图
Mat mask = new Mat(tMat.Size, DepthType.Cv8U, 3);
mask.SetTo(new MCvScalar(255, 255, 255));

// 2、定义目标图像在背景图像的位置
System.Drawing.Point p = new System.Drawing.Point(bMat.Width / 2, bMat.Height / 2);

// 3、SeamlessClone
CvInvoke.SeamlessClone(tMat, bMat, mask, p, dstMat, CloningMethod.Normal);
CvInvoke.Imshow("SeamlessClone image, " + dstMat.Size.ToString(), dstMat);

         效果就是这样,擎天柱已经拷贝到了海报的正中心。

        又到了一步到胃的讲解阶段,注意以下几点哈: 

  • SeamlessClone()函数里面,第一个是比较小的目标图像,比如上面例子的擎天柱.jpg。
  • SeamlessClone()函数里面,第二个是比较大的背景图像,比如上面例子的《金刚》海报.jpg。
  • 掩码图要和目标图像尺寸相同,执行SeamlessClone()函数时,非零部分才起作用。我的例子是一张纯白的图片,所以全部的擎天柱都拷贝过去了。
  • Point p这个参数我选择的是背景图片的中心位置,也就是擎天柱图片的中心点要放在《金刚》海报的中心点上。
  • CloningMethod  选择的是 Normal,那MonochromeTransfer和Mixed是什么效果呢,请看下面:

        记住了,Mixed方式效果最好,能去掉目标图片的背景。再举个例子:定义 tMat = 母猪.jpg,bMat = 碧海蓝天.jpg,CloningMethod  = Mixed,使用如下代码:

  

        激动人心的时刻来了,看看下面的结果,母猪飞上天的效果十分明显吧。

         掩码的使用就不介绍了,读者们自己去试试吧。

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

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

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

相关文章

【STM32】| 01——常用外设 | USART

系列文章目录 【STM32】| 01——常用外设 | USART 失败了也挺可爱,成功了就超帅。 文章目录 前言1. 基础理论1.1 并行通信和串行通信1.2 同步通信和异步通信1.3 单工/半双工/全双工1.4 电平信号(RS232/TTL)和差分信号(RS485)1.5 端口(COM) 2. 串口理论2.1 串口物理…

Android - CrashHandler 全局异常捕获器

官网介绍如下:Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时,Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio…

cisp难不难?cisp如何备考通过率高?

*CISP 全称为Certified Information Security Professional,是国际上广受欢迎的信息安全专业认证之一。 对于许多信息安全领域的从业者来说,CISP认证是他们职业生涯中的重要一步。那么,CISP难不难呢?如何备考通过率更高呢?接下来&#xf…

electron自定义窗口和右键菜单样式

前言 electron默认沿用系统UI,并没有提供很多接口供使用者定制样式,如果想要完全自定义的样式,目前我能想到的方案只能是通过前端自定义样式,然后通过进程通信来实现系统基础功能:最大/小化、关闭、拖动窗口等。 效果…

关于java的冒泡排序

关于java的冒泡排序 我们前面的文章中了解到了数组的方法类Arrays,我们本篇文章来了解一下最出名的排序算法之一,冒泡排序!😀 冒泡排序的代码还是非常简单的,两层循环,外层冒泡轮数,里层依次比…

伺服电机:编码器原理与分类

什么是编码器? 编码器是将旋转位置的改变转换为电气信号。 编码器是伺服系统闭环控制不可缺少的部件,编码器应用在轴的闭环控制和大多数的自动化控制中。编码器为闭环控制提供位置或速度的实际测量值。 一、编码器的分类 从编码器的原理和产生的信号类…

Cypress.io:快速简单可靠的浏览器测试工具 | 开源日报 No.142

cypress-io/cypress Stars: 45.5k License: MIT Cypress.io 是一个快速、简单和可靠的浏览器测试工具,可以用于任何在浏览器中运行的内容。它支持 Mac、Linux 和 Windows 系统,并提供了安装指南。 hrvach/deskhop Stars: 4.1k License: GPL-3.0 DeskH…

ansible基础概念

一、【写在前面】 前面断更了几天,笔者被流感给干倒了,去拍了个核磁,给我脑子干成脱髓鞘了,也不知道是之前新冠导致的还是如何,哎要变成愚蠢的低级动物了……稍微恢复一点体力,今天赶快来博客水一水文章。…

代码随想录-刷题第五十二天

300. 最长递增子序列 题目链接:300. 最长递增子序列 思路:动态规划五步曲: dp[i]表示从0到i,以nums[i]结尾的最长递增子序列的长度。 递推公式:if(nums[i]>nums[j]) dp[i] max(dp[i], dp[j] 1) 位置i的最长升序…

MFC 多文档视图架构

目录 多文档视图架构 模仿多文档视图架构 执行流程 多文档视图架构 一个多文档视图架构运行后会是下面的样子: 内部的子框架窗口就相当于一个单文档视图架构,多文档视图架构就相当于在外面套一层框架窗口。 特点:可以管理多个文档(可以有…

Armv8-R AArch32 architecture概念学习

提示 该博客主要为个人学习,通过阅读官网手册整理而来(个人觉得阅读官网的英文文档非常有助于理解各个IP特性)。若有不对之处请参考参考文档,以官网文档为准。阅读该文章,可以先查看AArch64 Exception Model学习&…

SSM 基础知识点

1. IoC IoC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在 Java 开发中,IoC 意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 谁控制谁,控制什么&…

C语言中关于函数递归的理解

递归的概念:如果一个对象部分包含它自己,或者利用自己定义自己,则称这个对象是递归的;如果 一个过程直接或间接调用自己,则称这个过程是一个递归过程。递归的主要思考方式在于:将大事化小 我们先看一个例子 题目:输入一个无符号数&#xff0…

软考高级系统架构设计师考试经验分享

文章目录 1. 软考介绍(1)什么是软考(2)软考的作用(3)软考各科目的难度(4)考试时间(5)考试形式 2.系统架构设计师备考经验(1)辅导资料&…

【2024系统架构设计】 系统架构设计师第二版-嵌入式系统架构设计理论与实践

目录 一 嵌入式系统软件架构的原理 二 嵌入式系统软件架构的设计方法 三 案例分析 一 嵌入式系统软件架构的原理 🚀嵌入式系统的典型架构可以分为

51单片机四位数码管计算器 Proteus仿真程序

目录 概要 仿真图 部分代码 资料下载地址:51单片机四位数码管计算器 Proteus仿真程序 概要 1.系统通过4x4的矩阵键盘输入数字及运算符。 2.可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E 3.可以进行加法以外…

c语言:输入成绩,统计不及格人数|练习题

一、题目 输入学生成绩&#xff0c;统计不及格的学生人数 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> //题目&#xff1a;输入成绩&#xff0c;统计不及格人数 //思考分析 //1、由于学生人数是未知数&#xff0c;所以可以在输入时&#xff0c;以0…

微信小程序如何自定义导航栏,怎么确定导航栏及状态栏的高度?导航栏被刘海、信号图标给覆盖了怎么办?

声明&#xff1a;本文为了演示效果&#xff0c;颜色采用的比较显眼&#xff0c;可根据实际情况修改颜色 问题描述 当我们在JSON中将navigationStyle设置成custom后&#xff0c;当前页面的顶部导航栏就需要我们制作了&#xff0c;但出现了一下几个问题&#xff1a; 导航栏的高…

Java缓冲字符流

PrintWriter的自动行刷新功能 如果实例化PW时第一个参数传入的是一个流&#xff0c;则此时可以再传入一个boolean型的参数&#xff0c;此值为true时就打开了自动行刷新功能。 即: 每当我们用PW的println方法写出一行字符串后会自动flush. package io; ​ import java.io.*; i…

解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题

1.环境场景 组件版本mysql5.7.44mysql-connector-java80.18 2. 问题描述 报mysql-connector-java 驱动连不上mysql数据库。 3. 可能的原因分析 查看数据库连接句柄是否对 如果数据库连接句柄中没有 useSSLfalse 的话可能会导致这样的问题。 就像下面这样&#xff1a; jdb…