opencv c++ 图像线性融合
opencv c++ 图像线性融合
线性融合原理:
F(x) = (1-alpha) * f0(x) + alpha*f1(x) + gamma;
实现代码
输出结果:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
int main(int argc, char** argv) {
cv::String imgPath = "F:/软件开发/qt开发/08opencv/opencv素材/Image/";
cv::String fileName = "Luffy.png";
cv::String fileName1 = "opencvlog.jpg";
//cv::String fileName = "mybaby.png";cv::String pathFile = imgPath + fileName;
cv::String pathFile1 = imgPath + fileName1;
cv::Mat src, src1;src = cv::imread(pathFile); // 采用默认方式读取图像
src1 = cv::imread(pathFile1);
if (src.data == NULL || src1.data==NULL) {
printf("图像赌徒失败\n");
return -1;
}
//cv::imshow("1. 默认读图", src);
cv::imshow("src", src);
cv::imshow("src1", src1);// 1. 图像切片
cv::Mat matROI;
matROI = src1(cv::Rect(0, 0, src.rows, src.cols));
//std::cout << "size of matROI:" << matROI << std::endl;
cv::imshow("图像切片", matROI);// 2. 图像大小调整
if (src.size() != src1.size()) {
int maxr = cv::max(src.size[0], src1.size[0]);
int maxc = cv::max(src.size[1], src1.size[1]);
cv::Size size = cv::Size(maxr, maxc);
/* 重定义图像大小
CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
Size dsize, double fx = 0, double fy = 0,
int interpolation = INTER_LINEAR );
*/
cv::resize(src, src, size);
cv::resize(src1, src1, size);
}
//3.图像混合操作
/*
CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype = -1);
*/
double alpha = 0.5;
double beta = 1-alpha;
double gamma = 0;
cv::Mat dst;
cv::addWeighted(src,alpha,src1, beta, gamma, dst);
cv::imshow("dst", dst);cv::waitKey(0);
system("pause");
return 0;
}