C++: void Mat:: copyTo (OutputArray m ) const C++: void Mat:: copyTo (OutputArray m, InputArray mask ) const 这个函数可以复制图像到另一个图像或矩阵上,可选参数是掩码 由于叠加的图像大小不一定相等,比如我们这里把一张小照片加到一张大照片上 我们可以在大照片上设置一个和小照片一样大的感兴趣区域 不使用掩码的时候,我们载入一张png,和一张jpg
/
定义感兴趣的图像区域ROI
Mat image =imread("123.jpg");
Mat logo=imread("logo.jpg");
Mat imageROI1,imageROI2;
imageROI1=image(Rect(500,250,logo.cols,logo.rows));//用Rect
imageROI2=image(Range(250,250+logo.rows),Range(200,200+logo.cols));//用Range
//code///
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
int main(){
cv::Mat image = cv::imread("E:/Image/Fruits.jpg");
cv::Mat logo = cv::imread("E:/logo.png");
cv::Mat imageROI;
imageROI = image(cv::Rect(10,10,logo.cols,logo.rows));
logo.copyTo(imageROI);
cv::namedWindow("result");
cv::imshow("result",image);
cv::waitKey();
return 0;
}
#include <opencv2/core/core.hpp>
int main(){
cv::Mat image = cv::imread("E:/Image/Fruits.jpg");
cv::Mat logo = cv::imread("E:/logo.png");
cv::Mat mask = cv::imread("E:/logo.png",0);
cv::Mat imageROI;
imageROI = image(cv::Rect(10,10,logo.cols,logo.rows));
logo.copyTo(imageROI,mask);
cv::namedWindow("result");
cv::imshow("result",image);
cv::waitKey();
return 0;
}
///以上转自cnblogs.com网友知识天地的博客
________________________________________华丽分割线________________________________________
线性混合操作
计算数组加权和
void addWeighted(InputArray src1,double alpha, InputArray src2, double beta , double gamma, OutputArray dst , int dtype=-1);
//参数:输入图像1,加权数1,输入图像2,加权数2,加到和上的标量值,输出混合图像,阵列可选深度(两数组深度相同时可默认为-1)
//dst =src[i]*alpha+src[i]*beta+gamma,beta=1.0-alpha,也就是调节alpha值来改变图像混合程度,效果类似调节一幅图像在另一幅图像上的透明度。