OpenCV 实战 - 图像融合(cv::copyTo())
cv::copyTo()
OpenCV 中 cv::copyTo 是用来复制矩阵对象 Mat 的,可以实现直接创建一个副本,且在副本矩阵上的操作不会影响原矩阵。
cv::copyTo() 声明
/** @brief Copies the matrix to another one.The method copies the matrix data to another matrix. Before copying the data, the method invokes :
@codem.create(this->size(), this->type());
@endcode
so that the destination matrix is reallocated if needed. While m.copyTo(m); works flawlessly, the function does not handle the case of a partial overlap between the source and the destination matrices.When the operation mask is specified, if the Mat::create call shown above reallocates the matrix, the newly allocated matrix is initialized with all zeros before copying the data.
@param m Destination matrix. If it does not have a proper size or type before the operation, it is reallocated.*/
void copyTo( OutputArray m ) const;
同时 cv::copyTo() 被重载了,声明如下:
/** @overload
@param m Destination matrix. If it does not have a proper size or type before the operation, it is reallocated.
@param mask Operation mask of the same size as \*this. Its non-zero elements indicate which matrix elements need to be copied. The mask has to be of type CV_8U and can have 1 or multiple channels.
*/
void copyTo( OutputArray m, InputArray mask ) const;
可以看到重载处注释:第二个参数 mask 的尺寸与原图像相同,它的非零元素表示需要复制的矩阵元素,mask 必须是 CV_8U 类型的,可以有 1 个或多个通道。
测试
下图是两张 1000*1000 的图像
目标是将两张图像叠在一起,同时在第一张图像中的白色圆形区域内复制第二张图像的对应区域,即完成图像融合,形成如下效果。
由于 cv::copyTo 可以复制将 mask 矩阵中的非零元素的位置对应于原图像中该位置的值,从而可以实现图像融合,代码如下:
#include <iostream>
#include <sstream>
#include <fstream>#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>#define background "0_background.png"
#define foreground "HappyFish.jpg"void image_fusion1(cv::Mat& matBackGround, cv::Mat& matForeGround, cv::Mat& matFusion);int main(int argc, char** argv)
{cv::Mat matBackGround;cv::Mat matForeGround;cv::Mat matFusion;image_fusion1(matBackGround, matForeGround, matFusion);return 0;
}void image_fusion1(cv::Mat& matBackGround, cv::Mat& matForeGround, cv::Mat& matFusion)
{matBackGround = cv::imread(cv::samples::findFile(background), cv::IMREAD_COLOR);matForeGround = cv::imread(cv::samples::findFile(foreground), cv::IMREAD_COLOR);//cv::namedWindow("Background", cv::WINDOW_AUTOSIZE);//cv::namedWindow("Foreground", cv::WINDOW_AUTOSIZE);//cv::namedWindow("Image Fusion", cv::WINDOW_AUTOSIZE);matForeGround.copyTo(matFusion, matBackGround);cv::imshow("Background", matBackGround);cv::imshow("Foreground", matForeGround);cv::imshow("Image Fusion", matFusion);cv::imwrite("Image Fusion.png", matFusion);cv::waitKey(0);
}
OpenCV 实战 - 图像融合(cv::copyTo())相关推荐
- 基于OpenCV的图像融合
OpenCV实践-基于OpenCV的图像融合 –<小白学视觉>学习笔记 我们可以尝试多种不同图像组合. 比如可以将两张不同的图片或文本图像与图像组合在一起, 或将彩色背景与圈像组合在一起. ...
- python图像融合算法_Python OpenCV 实现图像融合
原标题:Python OpenCV 实现图像融合 来自:https://www.linuxmi.com/python-opencv-image-blending.html 在本文中,我们将讨论Pyth ...
- opencv 4快速入门_基于OpenCV的图像融合
本期我们将一起学习如何使用OpenCV的进行图像拼接. 01. 目录 python 入门 步骤1 -图像导入 步骤2-调整图像大小 步骤3-融合图像 步骤4-导出结果 02. Python Pytho ...
- opencv之图像mat复制copyTo,clone=
函数原型 Mat clone() const; void copyTo( OutputArray m ) const; void copyTo( OutputArray m, InputArray m ...
- OpenCV 进行图像融合拼接
环境: 运行环境:Win10 x64 OpenCV 版本: 4.5.1 源代码: #include <iostream> #include <vector> #include ...
- OpenCV图像处理使用笔记(四)——图像融合
前言常用 1.在OpenCV中定义了好多函数用来操作图像矩阵,有两个矩阵相加的,相减的,混合的,下面我使用QT加OpenCV演示图像融合这个函数. 2.我的IDE是Qt creator,OpenCV的 ...
- 再次升级,985博士整理的71个OpenCV实战项目教程开放下载!
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的 ...
- 重磅升级,52个Python+OpenCV实战项目教你掌握图像处理
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近期小白学视觉公众号推出了多篇Python+OpenCV实战项目的 ...
- [Python图像处理] 五.图像融合、加法运算及图像类型转换
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
最新文章
- 寻找带环的链表的柄长
- 理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换
- 用css自定义滚动条样式
- vs2012下 error4996
- Spring源码:AOP转文
- 同事说rar压缩有风险,让我用zip压缩文件
- IDEA如何删除无用war包
- java i= i_java中 i!=i+1?你错了。 | 学步园
- 学python前要学c吗_目前python熟练 ,想再学golang 需要先学c吗?
- tcpdump + mk-query-digest 分析mysql
- 使用keytool 生成证书
- 【转】匈牙利命名法则
- java解析dcm文件
- 关键字synchronized与volatile详解
- Inspect的学习笔记
- 如何用数据分析的概念制作简单Excel报表?
- Flink 消费Kafka的有趣现象:固定时间、固定数量的堆积
- 我国逸管家中小企业融资难现状及分析(含开题报告、实践报告)(20180404105041)
- 十七、打码平台的使用
- HIT-ICS程序人生大作业