深入浅析OpenCV copyTo()函数

 更新时间:2022年01月05日 16:34:53   作者:流楚丶格念  
在Mat矩阵类的成员函数中copyTo(roi , mask)函数是非常有用的一个函数,尤其是后面的mask可以实现蒙版的功能,下面通过本文给大家介绍下OpenCV copyTo()函数的相关知识,感兴趣的朋友一起看看吧

copyTo()

函数原型

copyTo这个函数有两种定义方式,分别是:

void copyTo( OutputArray m ) const;
void copyTo( OutputArray m, InputArray mask ) const;

参数:

  • 一个参数:一张输出图像
  • 两个参数:一张输出图像一个掩码图

简单示例

例如:

image_in.copyTo(image_out);

就是把image_in这张图复制(copy to)到image_out上。

又例如:

image_in.copyTo(image_out,mask);

则是不仅把image_in这张图复制(copy to)到image_out上,且image_in对应mask中像素值为0的像素点都不会贴到image_out上。

总结上述两个函数用法的作用:

  • 一个参数:表示将image_in矩阵复制到image_out中。
  • 两个参数:表示得到一个附加掩膜mask的矩阵image_out

一个参数的很简单就是复制图像,上面读mask用法探究不深,那么我们继续来探究一下mask参数的用法

mask参数深入探究

例如下面用法代码:

A.copyTo(B, mask)

mask作为一个掩模板,如果在某个像素点(i, j)其值为1(只看第一通道,所以mask单通道即可),则把A.at(i, j)处的值直接赋给B.at(i, j),如果其值为0则B.at(i, j)处保留其原始像素值。这样能够使得图标边缘的颜色和原图保持一致。

例如下面具体用法

#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>  
using namespace cv;
using namespace std;
int main()
{
	Mat srcImage = imread("./test1.jpg");
	Mat dstImage = imread("./test.jpg");
	if (!srcImage.data || !dstImage.data)
	{
		cout << "could not load image !";
		return -1;
	}
	// namedWindow("图1原始图",);
	imshow("input_src1", srcImage);
	imshow("input_src2", dstImage);
	// 创建一个感兴趣区域
	Mat imageROI = srcImage(Rect(0, 0, dstImage.cols, dstImage.rows));
	// 加载掩模板
	Mat mask = imread("./test.jpg", 0);
	// 进行复制
	dstImage.copyTo(imageROI, mask);
	// 显示效果图
	imshow("out_put", srcImage);
	waitKey(0);
	return 0;
}

运行效果图:

在这里插入图片描述

到此这篇关于OpenCV copyTo()函数的文章就介绍到这了,更多相关OpenCV copyTo()函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C/C++实现手写数字识别的示例详解

    C/C++实现手写数字识别的示例详解

    这篇文章主要为大家详细介绍了如何使用C/C++实现手写数字识别,分别处理 32*32 文本数据集和mnist 28*28 png数据集,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-10-10
  • 有关C++中类类型转换操作符总结(必看篇)

    有关C++中类类型转换操作符总结(必看篇)

    下面小编就为大家带来一篇有关C++中类类型转换操作符总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 详解C++11中的线程库

    详解C++11中的线程库

    线程是操作系统中的一个概念,线程对象可以关联一个线程,用来控制线程以及获取线程的状态,这篇文章主要介绍了C++11中的线程库的相关知识,需要的朋友可以参考下
    2022-01-01
  • C++超详细讲解标准库

    C++超详细讲解标准库

    C++强大的功能来源于其丰富的类库及库函数资源。C++标准库(C++ Standard Library, 亦可称作,C++标准程序库)的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利用标准库完成
    2022-06-06
  • 使用C语言详解霍夫曼树数据结构

    使用C语言详解霍夫曼树数据结构

    这篇文章主要介绍了使用C语言详解霍夫曼树数据结构,包括一道AMC相关的例题演示需要的朋友可以参考下
    2015-08-08
  • C++实现LeetCode(99.复原二叉搜索树)

    C++实现LeetCode(99.复原二叉搜索树)

    这篇文章主要介绍了C++实现LeetCode(99.复原二叉搜索树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C/C++实操True and false详解

    C/C++实操True and false详解

    这篇文章主要给大家介绍了关于Python中常用的数据类型bool(布尔)类型的两个值:True和False的相关资料,通过示例代码给大家进行了解惑,让对这两个值有所疑惑的朋友们能有起到一定的帮助,需要的朋友下面来一起看看吧。
    2021-09-09
  • 详解C++中string的用法和例子

    详解C++中string的用法和例子

    string是C++标准库的一个重要的部分,主要用于字符串处理。这篇文章主要介绍了C++ string的用法和例子,需要的朋友可以参考下
    2018-05-05
  • C语言之实现单链表指定结点的插入方式

    C语言之实现单链表指定结点的插入方式

    这篇文章主要介绍了C语言之实现单链表指定结点的插入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 在Visual Studio Code中配置C++编译环境的问题

    在Visual Studio Code中配置C++编译环境的问题

    关于Visual Studio Code对C++环境的配置方法应该有好多种,我这里用到了其中的两种,具体内容详情文中给大家详细介绍,对Visual Studio Code配置C++编译环境相关知识感兴趣的朋友一起看看吧
    2021-07-07

最新评论