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::resize(src, src, size);
cv::resize(src1, src1, size);
}
//3.圖像混合操作
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;
}