1. 程式人生 > >【VC++、OpenCV3.4】影象混合

【VC++、OpenCV3.4】影象混合

1、線性混合理論:兩幅影象的每一個畫素線性混合

f(x)=(1-a)f_{0}(x)+af_{1}(x) 其中a是0-1範圍的值。f0和f1是源影象

相關的API(addWeighted)

用法:

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype = -1);

計算公式:dist(I)=saturate(src1(I)*alpha+src2(I)*beta+gamma)

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv) {

	Mat src1 = imread("C:\\Users\\admin\\Desktop\\zuo.jpg", IMREAD_COLOR);
	Mat src2 = imread("C:\\Users\\admin\\Desktop\\you.jpg", IMREAD_COLOR);
	if (src1.empty())
	{
		printf("Could not load image zuo.jpg");
		return 0;
	}
	if (!src2.data)
	{
		printf("Could not load image you.jpg");
		return 0;
	}
	namedWindow("Pic1 window", CV_WINDOW_AUTOSIZE);
	imshow("Pic1 window", src1);
	namedWindow("Pic2 window", CV_WINDOW_AUTOSIZE);
	imshow("Pic2 window", src2);

	double alpha = 0.5;
	Mat dst1,dst2;
	if (src1.rows==src2.rows && src1.cols==src2.cols && src1.type()==src2.type())
	{
		addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst1);
		//當然也可以之間使用add相加/
		add(src1, src2, dst2);
		namedWindow("add window", CV_WINDOW_AUTOSIZE);
		imshow("add window", dst1);
		namedWindow("add window2", CV_WINDOW_AUTOSIZE);
		imshow("add window2", dst2);
	}
	else
	{
		printf("The size of two pics is not same...");
		return -1;
	}

	waitKey(0);
	return 0;
}

看視訊的時候挺長的,但是內容其實挺少的。