2021.3.28OpenCV06图像混合操作addWeighted

/*txwtech
2021.3.28OpenCV06图像混合操作addWeighted
理论-线性混合操作
相关API (addWeighted)
理论-线性混合操作

AddWeighted 计算两数组的加磅值的和

void  cvAddWeighted( const CvArr* src1, double alpha,  
const CvArr* src2, double beta,           
double gamma, CvArr* dst ); 
src1  第一个原数组.  
alpha  第一个数组元素的磅值  
src2  第二个原数组  
beta  第二个数组元素的磅值  
dst  输出数组  
gamma  作和合添加的数量。
函数 cvAddWeighted 计算两数组的加磅值的和:
dst(I)=src1(I)*alpha+src2(I)*beta+gamma
所有的数组必须的相同的类型相同的大小(或 ROI 大小)
*/

/*txwtech
2021.3.28OpenCV06图像混合操作addWeighted
理论-线性混合操作
相关API (addWeighted)
理论-线性混合操作

AddWeighted 计算两数组的加磅值的和

void  cvAddWeighted( const CvArr* src1, double alpha,  
const CvArr* src2, double beta,           
double gamma, CvArr* dst ); 
src1  第一个原数组.  
alpha  第一个数组元素的磅值  
src2  第二个原数组  
beta  第二个数组元素的磅值  
dst  输出数组  
gamma  作和合添加的数量。
函数 cvAddWeighted 计算两数组的加磅值的和:
dst(I)=src1(I)*alpha+src2(I)*beta+gamma
所有的数组必须的相同的类型相同的大小(或 ROI 大小)
*/
#include <opencv2\opencv.hpp>

#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
	Mat src1;
	Mat src2;
	Mat dst;
	src1 = imread("E:/pictures/win7logo1.jpg");
	src2 = imread("E:/pictures/win7logo2.jpg");
	//if (src.empty())
	if(!src1.data)
	{
		printf("load win7logo1 image failed\n");
		return -1;
	}
	if (!src2.data)
	{
		printf("load win6logo2 image failed\n");
		return -1;
	}
	double alpha = 0.5;//
	if (src1.rows == src2.rows && src1.cols == src2.cols
		&& src1.type() == src2.type())
	{
		addWeighted(src1,alpha,src2,(1.0-alpha),0.0,dst);
		//add(src1,src2,dst,Mat());//强行图像叠加,不推荐
		//multiply(src1, src2, dst, 1.0);//像素相乘
		imshow("win7a",src1);
		imshow("win7b",src2);
		namedWindow("mixed image", CV_WINDOW_AUTOSIZE);
		imshow("mixed image", dst);
	}
	else
	{
		printf("mix failed,size or type is not same\n");
	}

	

	waitKey(0);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/115283883