初级图像混合

#include <opencv2/opencv.hpp>
#include <Windows.h>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;


/*
利用addweight 实现图像混合
*/
bool LinearBlending()
{
	double alphaValue = 0.5;
	double betaValue;
	Mat srcImage2, srcImage3, dstImage;
	//两幅图尺寸和类型相同++++++++++
	srcImage2 = imread("C:/Users/hasee-pc/Desktop/dog.jpg");
	srcImage3 = imread("C:/Users/hasee-pc/Desktop/women.jpg");
	if (!srcImage2.data)
	{
		printf("error at srcImage2\n");
		return -1;
	}
	if (!srcImage3.data)
	{
		printf("error at srcImage3\n");
		return -1;
	}
	betaValue = (1.0 - alphaValue);
	addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);

	namedWindow("<2>线性混合实列窗口【原图】", 1);
	imshow("<2>线性混合实列窗口【原图】", srcImage2);

	namedWindow("<2>线性混合实列窗口【效果图】", 1);
	imshow("<2>线性混合实列窗口【效果图】", dstImage);

	//imwrite("C:/Users/hasee-pc/Desktop/addimage.jpg", dstImage);

	return true;
}
//-------------[ROI_LinearBlending]-----------------------
//函数名:线性混合实现函数,指定区域线性混合,利用cv::addWeighted()函数结合定义
//感兴趣区域ROI,实现自定义区域的线性混合
//--------------------------------------------------------
bool ROI_LinearBlending()
{
	Mat srcImage4 = imread("C:/Users/hasee-pc/Desktop/dog.jpg", 1);
	Mat logoImage = imread("C:/Users/hasee-pc/Desktop/girl.jpg");

	if (!srcImage4.data)
	{
		printf("读取srcImage4错误!\n");
		return false;
	}
	if (!logoImage.data)
	{
		printf("读取logoImage错误!\n");
		return false;
	}
	Mat ImageROI;

	ImageROI = srcImage4(Rect(200, 250, logoImage.cols, logoImage.rows));
	//ImageROI = srcImage4(Range(250, 250 + logoImage.rows), Range(200, 200 + logoImage.cols));

	addWeighted(ImageROI, 0.5, logoImage, 0.3, 0.0, ImageROI);

	namedWindow("<3>区域线性混合实列窗口");
	imshow("<3>区域线性混合实列窗口", srcImage4);

	return true;
}
//-------------------【ROI_AddImage()】----------------
//函数名:ROI_AddImage()
//利用感兴趣区域ROI实现图像叠加
bool ROI_AddImage()
{
	Mat srcImage1 = imread("C:/Users/hasee-pc/Desktop/dog.jpg");
	Mat logoImage = imread("C:/Users/hasee-pc/Desktop/girl.jpg");

	if (!srcImage1.data)
	{
		printf("读取srcImage1错误!\n");
		return false;
	}
	if (!logoImage.data)
	{
		printf("读取logoImage错误!\n");
		return false;
	}

	Mat ImageROI = srcImage1(Rect(200, 250, logoImage.cols, logoImage.rows));
	//加载掩膜(必须是灰度图)
	Mat mask = imread("C:/Users/hasee-pc/Desktop/girl.jpg", 0);

	//掩膜复制到ROI
	logoImage.copyTo(ImageROI, mask);

	namedWindow("<1>利用ROI实现图像叠加实列窗口");
	imshow("<1>利用ROI实现图像叠加实列窗口", srcImage1);

	return true;
}
int main(int argc,char *argv[],char **env)
{
	system("color 5E");

	if (ROI_AddImage() && LinearBlending() && ROI_LinearBlending())
	{
		printf("Successful create image\n");
	}

	waitKey(0);

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值