1、image.copyTo(imageROI),作用是把image的内容粘贴到imageROI,imageROI是源文件上的区域
2、image.copyTo(imageROI,mask),作用是把mask和image重叠以后把mask中像素值为0(black)的点对应的image中的点变为透明,而保留其他点。
mask:即掩模。掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值、数据范围、有限或无限值、感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的任意组合作为输入来建立掩模。


#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace cv;
bool ROI_AddImage()
{
Mat src = imread("E:\\1.jpg"); //source的意思
Mat log = imread("E:\\out.png");
Mat ROI = src(Rect(100, 100, log.cols, log.rows));//给要拷贝进来的图像画好的区域
log.copyTo(ROI);//将log图像拷贝到ROI区域,ROI区域在src上,这一点容易搞混
//log和src 的类型必须一致,否则会出错
imshow("1", src);
imshow("2", log);
return true;
}
bool ROI_AddImage1()
{
Mat src = imread("E:\\1.jpg"); //source的意思
Mat log = imread("E:\\out.png");
Mat ROI = src(Rect(0, 0, log.cols, log.rows));//给要拷贝进来的图像画好的区域
Mat mask = imread("E:\\out.png", 0);
log.copyTo(ROI, mask); //将log图像拷贝到ROI区域,ROI区域在src上,这一点容易搞混
//将黑色部分透明化处理
imshow("3", src);
imshow("4", log);
return true;
}
void main()
{
ROI_AddImage1();
ROI_AddImage();
waitKey();
}

这篇博客介绍了OpenCV中使用`copyTo()`函数进行图像拷贝的方法,包括基本的图像区域拷贝和结合掩模实现的透明化处理。通过示例代码展示了如何在源图像上指定区域拷贝另一图像,并利用掩模将黑色区域变为透明,保留其他颜色区域。
5881

被折叠的 条评论
为什么被折叠?



