1.图像加法:
首先介绍加法函数属性:
void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype=-1);
参数说明:
两幅图像融合时,我们要求这两幅图像必须类型尺寸一致。但是,若遇到两幅图像尺寸不相同时,我们怎么处理呢?两幅图像融合时,我们要求这两幅图像必须类型尺寸一致。但是,若遇到两幅图像尺寸不相同时,我们怎么处理呢?
两种方法解决这个问题
1.重置其中一副图像的尺寸大小,使其两幅图像尺寸一致;
2.在较大的图像中设置感兴趣区域ROI,获得与较小的那个图像尺寸一致的区域;
第一种方法代码:
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat img1 = imread(“1.jpg”);
Mat img2 = imread(“2.jpg”);
Mat dst; //存储结果
namedWindow(“img1”); //创建窗口
imshow(“img1”, img1);
namedWindow(“img2”); //创建窗口
imshow(“img2”, img2);
resize(img1, img1, Size(img2.cols, img2.rows));//调整img1的大小与img2的大小一致,融合函数addWeighted()要求输入的两个图形尺寸必须相同
cout << "img1 " << int(img1.at(10, 10)[0]) << endl;
cout << "img2 " << int(img2.at(10, 10)[0]) << endl;
addWeighted(img1, 0.6, img2, 0.4, 0., img2); //最后融合效果显示在img2图像上
namedWindow(“图像1与图像2融合效果图”);
imshow(“图像1与图像2融合效果图”, img2);
waitKey(0);
}
运行结果如下:
第二种方法代码:
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat img1 = imread(“1.jpg”);
Mat img2 = imread(“2.jpg”);
Mat dst; //存储结果
namedWindow(“img1”); //创建窗口
imshow(“img1”, img1);
namedWindow(“img2”); //创建窗口
imshow(“img2”, img2);
cout << "img1 " << int(img1.at(10, 10)[0]) << endl;
cout << "img2 " << int(img2.at(10, 10)[0]) << endl;
Mat imageROI;//利用ROI,获取将要理图像的矩形大小
imageROI = img2(Rect(400, 50, img1.cols, img1.rows));//在img2图像左上角(400,50)处(即起点位置),获取同img1图像尺寸一致的区域
addWeighted(img1, 0.6, imageROI, 0.4, 0., imageROI);
namedWindow(“图像1与图像2融合效果图”);
imshow(“图像1与图像2融合效果图”, img2);
waitKey(0);
}
运行结果如下:
absdiff(img1,img2,dst);
乘除与或非:
dst=5*img1;//增加曝光
dst=img1/5;//降低曝光
bitwise_and(img1,img2,dst);//逻辑与,求交集
bitwise_or(img1,img2,dst);//逻辑或,求并集
bitwise_not(img1,dst);//逻辑非,求补集
bitwise_xor(img1,img2,dst);//异或,相同为0,相异为1