OpenCV copyTo()函数

简介: 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;
}


运行效果图:


相关文章
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
201 0
|
计算机视觉
OpenCV-图像翻转函数cv::filp
OpenCV-图像翻转函数cv::filp
319 0
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
271 0
|
计算机视觉 C++
OpenCV-计时函数cv::getTickCount&cv::getTickFrequency
OpenCV-计时函数cv::getTickCount&cv::getTickFrequency
343 0
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
2934 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
4096 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
计算机视觉
OpenCV滑动条(createTrackbar()函数)如何在多个维度进行同步调整?
这篇文章介绍了如何在OpenCV中使用`createTrackbar()`函数创建多个滑动条以同步调整图像的多个维度(如亮度和对比度),通过将不同滑动条的回调函数合并为一个,确保它们在同一图像基础上进行调整。
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
监控 算法 Serverless
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
450 0
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
210 0