目录
函数介绍
用法一:logo.copyTo(src_ROI,logo_mask)
-
内部操作: logo将自己经过 logo_mask掩膜后,再复制到 src_ROI中
-
参数要求:logo和src_ROI要类型一致;logo和src_ROI和logo_mask要尺寸一致
用法二:
logo.copyTo(src_ROI)
-
内部操作: logo将自己复制到 src_ROI中
-
参数要求:logo和src_ROI:类型一致,尺寸一致
使用测试
实际使用情况多是:logo_IMG(贴图)为小尺寸图具有黑色背景的图,src_IMG(被贴图)为大尺寸的图。
1.copyTo使用条件要求logo和src_ROI和logo_mask要尺寸一致,所以要将src_IMG的要贴图ROI区域提取出来给src_IMG_ROI,ROI区域 cv::Rect(贴图起点X,贴图起点y,贴图尺寸宽,贴图尺寸高)
cv::Mat src_IMG_ROI =src_IMG(cv::Rect(20, 20,logo_IMG.cols,logo_IMG.rows));
2.copyTo使用条件要求logo_IMG和src_ROI要类型一致,如果类型不一致就需要转换,例如logo_IMG是一通道的CV_8UC1格式灰度图,而src_IMG是三通道的CV_8UC3格式彩色图,则要转logo_IMG成三通道CV_8UC3格式
cv::cvtColor(logo_IMG,logo_IMG, cv::COLOR_GRAY2BGR);
cv::Mat src_IMG=cv::imread("src.jpg");//读取被贴图(漂亮的艺珍)
cv::Mat logo_IMG=cv::imread("logo.png");//读取贴图(名字)
cv::Mat logo_IMG_mask=cv::imread("logo.png",0);//读取灰度的贴图做mask图
if (!src_IMG.empty() && !logo_IMG.empty() && !logo_IMG_mask.empty()//三张图片都读取成功
&& src_IMG.type()==logo_IMG.type() ) {//logo_IMG(贴图)和src_IMG(被贴图)的类型需要一致
cv::imshow("src",src_IMG);
cv::imshow("logo",logo_IMG);
cv::imshow("mask",logo_IMG_mask);
//用法一
cv::Mat src_IMG_ROI =src_IMG(cv::Rect(30, 20,logo_IMG.cols,logo_IMG.rows));//提取src_IMG的ROI区域到src_IMG_ROI
logo_IMG.copyTo(src_IMG_ROI,logo_IMG_mask);//logo_IMG经过logo_IMG_mask掩膜后的图复制到src_IMG_ROI
cv::imshow("Usage 1",src_IMG);
//用法二
logo_IMG.copyTo(src_IMG_ROI);//logo_IMG图复制到src_IMG
cv::imshow("Usage 2",src_IMG);
}
else{
cout<<"ERROR: no file or Different types!"<<endl;
cout<<"src_IMG"<<src_IMG.type()<<endl;
cout<<"logo_IMG"<<logo_IMG.type()<<endl;