相同尺寸图像融合:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
//【0】定义相关变量
Mat ac, ahand;
//【1】读取原始图像并检查图像是否读取成功
ac = imread("D:\\OutPutResult\\ImageTest\\ac.jpg");
ahand = imread("D:\\OutPutResult\\ImageTest\\ahand.jpg");
if (ahand.empty() && ac.empty()) //检验两幅图像是否同时存在
{
cout << "读取图像有误,请重新输入正确路径!\n";
return -1;
}
//【3】显示原始图像
namedWindow("图像1ac"); //创建窗口
imshow("图像1ac", ac); //显示窗口
namedWindow("图像2ahand");
imshow("图像2ahand", ahand);
//【4】调整ahand的大小与ac的大小一致,融合函数addWeighted()要求输入的两个图形尺寸必须相同
resize(ahand, ahand, Size(ac.cols, ac.rows));
//【5】利用addWeighted()函数对两幅图像进行融合
addWeighted(ac, 0.6, ahand, 0.4, 0., ac); //最后融合效果显示在ac图像上
/*
若不想毁坏原始ac图像,也可建立一个与ac图像类型尺寸一样的新图像,将融合后的图像保存到上面。
建立方法:
Mat newImage(ac.size(), ac.type()); //newImage与ac类型尺寸相同
*/
namedWindow("图像1与图像2融合效果图");
imshow("图像1与图像2融合效果图", ac);
//【6】保持等待状态
waitKey();
return 0;
}
结果:
不同尺寸图像融合:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
//【0】定义相关变量
Mat ac, ahand;
//【1】读取原始图像并检查图像是否读取成功
ac = imread("D:\\OutPutResult\\ImageTest\\ac.jpg");
ahand = imread("D:\\OutPutResult\\ImageTest\\ahand.jpg");
if (ahand.empty() && ac.empty()) //检验两幅图像是否同时存在
{
cout << "读取图像有误,请重新输入正确路径!\n";
return -1;
}
//【3】显示原始图像
namedWindow("图像1ac"); //创建窗口
imshow("图像1ac", ac); //显示窗口
namedWindow("图像2ahand");
imshow("图像2ahand", ahand);
//【4】利用ROI,获取将要理图像的矩形大小
Mat imageROI;
imageROI = ac(Rect(20, 40, ahand.cols, ahand.rows));//在ac图像左上角(20,40)处(即起点位置),获取同ahand图像尺寸一致的区域
//【5】利用addWeighted()函数对两幅图像进行融合
addWeighted(ahand, 0.6, imageROI, 0.4, 0., imageROI);
namedWindow("图像1与图像2融合效果图");
imshow("图像1与图像2融合效果图", ac);
//【6】保持等待状态
waitKey();
return 0;
}
结果: