opencv-图像的初级混合

void addWeighted(inputarray src1,double alpha1,inputarray src2,doubke alpha2,double gamma ,outputarray dst,int dtype=-1);
(1)第一个Mat类
(2)第一个Mat类的权重
(3)第二个Mat类
(4)第二个Mat类的权重
(5)一个加到权值总和上的标量值
(6)输出的Mat类
(7)输出数组的可选深度

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
bool ROI_AddImage();
bool LinearBlending();
bool ROI_LinearBlending();

int main()
{
	system("color 5E");
	if (ROI_AddImage() && LinearBlending() && ROI_LinearBlending())
		cout << "success" << endl;
	waitKey(0);
	return 0;
}
bool ROI_AddImage()//利用感兴趣区域实现图像的叠加
{
	Mat srcImage1 = imread("C:/Users/csh/Desktop/1.jpg");
	Mat logoImage = imread("C:/Users/csh/Desktop/4.jpg");
	if (!srcImage1.data)
	{
		printf("error1\n");
		return false;
	}
	if (!logoImage.data)
	{
		printf("error2\n");
		return false;
	}
	Mat imageROI = srcImage1(Rect(200, 100, logoImage.cols, logoImage.rows));//设定感兴趣区域
	Mat mast = imread("C:/Users/csh/Desktop/4.jpg", 0);//加载掩膜,必须是灰度图
	logoImage.copyTo(imageROI, mast);//将掩膜覆盖到感兴趣区域
	imshow("效果图1", srcImage1);
	return true;
}
bool LinearBlending()//实现图像的线性混合
{
	Mat dstImage;
	Mat srcImage2 = imread("C:/Users/csh/Desktop/2.jpg");
	Mat srcImage3 = imread("C:/Users/csh/Desktop/3.jpg");//两幅图片为同样的类型和尺寸
	addWeighted(srcImage2, 0.5, srcImage3, 0.5, 0.0,dstImage);
	imshow("效果图2", dstImage);
	return true;
}
bool ROI_LinearBlending()//指定区域线性图像混合
{
	Mat srcImage = imread("C:/Users/csh/Desktop/1.jpg");
	Mat logoImage = imread("C:/Users/csh/Desktop/4.jpg");
	Mat imageROI = srcImage(Rect(150, 200, logoImage.cols, logoImage.rows));
	addWeighted(imageROI, 0.5, logoImage, 0.5, 0.0, imageROI);
	imshow("效果图3", imageROI);
	return true;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值