OpenCV之ROI区域图像叠加和初级图像混合


前言

这一次我们一起学习如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作(编译环境OpenCV 3.0beta和VS2010)


一、设置感兴趣区域

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
好了,下面我们来看一个实例,显示如何利用ROI将一幅图加到另一 幅图的指定位置。 大家如果需要拷
贝如下的函数中的代码直接运行的话,自己建一个基于console的程序 ,然后把函数体中的内容拷贝到
main
函数中,然后找两幅大小合适的图片,加入到工程目录下,并和代码中读取的文件名一 致即可。
在下面的代码中,我们通过一个图像掩膜( mask ),直接将插入 处的像素设置为logo图像的像素值,
这样效果会很赞很逼真

二、ROT代码示例

在这里插入图片描述

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
bool lien()
{
Mat imag1;
Mat imag2;
Mat imag3;
imag1=imread("girl.jpg");
imag2=imread("zhi.jpg");
if(!imag1.data){printf("error\r\n"); return  false;}
if(!imag2.data){printf("error\r\n"); return  false;}
Mat imageROI = imag1(Rect(200,350,imag2.cols,imag2.rows));
Mat mask=imread("zhi.jpg",0);
imag2.copyTo(imageROI,mask);
 namedWindow("混合图像");
 imshow("混合图像",imag1);
  return true;
}

int main()
{
	lien();
 waitKey();
  return 0;
}

原图像1
在这里插入图片描述
原图像2
在这里插入图片描述

混合图像
在这里插入图片描述
这里的皮皮志是通过操作之后加上去的图像

二、addWeighted代码示例

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

在这里插入图片描述

代码解析

定义一些局部变量alpha值和beta值
这里我们设置alpha的值为0.7

double alpha=0.7;
double beta;
Mat imag1;
Mat imag2;
Mat imag3;

读取两幅图像并做错误处理

imag1=imread("fire.jpg");
imag2=imread("rain.jpg");
if(!imag1.data){printf("error\r\n"); return  false;}
if(!imag2.data){printf("error\r\n"); return  false;}

图分别为
在这里插入图片描述
在这里插入图片描述
<2 >进行图像混合加权操作
载入图像后,我们就可以来生成混合图像,也就是之前公式中的g(x)。为此目的,使用函数addWeighted可以很方便地实现,也就是因
为addWeighted进行了如下计算:
这里的对应于addWeighted的第2个参数alpha
这里的对应于addWeighted的第4个参数beta
这里的对应于addWeighted的第5个参数,在上面代码中被我们设为0.0。
代码其实很简单,就是这样:

beta=(1.0-alpha);
addWeighted(imag1,alpha,imag2,beta,0.0,imag3);
 namedWindow("原图1");
 imshow("原图1",imag1);
  namedWindow("原图2");
 imshow("原图2",imag2);
 namedWindow("混合图像");
 imshow("混合图像",imag3);

通过代码我们可以其实这样理解,imag1透明度为0.7,imag2透明度为0.3
他们合起来加载到imag3,形成一个新的图像,这就是图像混合。
让我们运行整个代码

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
bool lien()
{
double alpha=0.7;
double beta;
Mat imag1;
Mat imag2;
Mat imag3;
imag1=imread("fire.jpg");
imag2=imread("rain.jpg");
if(!imag1.data){printf("error\r\n"); return  false;}
if(!imag2.data){printf("error\r\n"); return  false;}
beta=(1.0-alpha);
addWeighted(imag1,alpha,imag2,beta,0.0,imag3);
 namedWindow("原图1");
 imshow("原图1",imag1);
  namedWindow("原图2");
 imshow("原图2",imag2);
 namedWindow("混合图像");
 imshow("混合图像",imag3);
  return true;
}

int main()
{
	lien();
 waitKey();
  return 0;
}

最后得出很唯美的一张图片
在这里插入图片描述
是不是感觉更加高大上了~

总结

最后再混合两张图,代表我们对知识和未知世界的探索~
一张是我们眼睛的图
在这里插入图片描述
一张是未知的宇宙
在这里插入图片描述

在这里插入图片描述

以上就是今天要讲的内容,本文简单介绍了ROT和addWeight的使用
在这里插入图片描述
参考博文:OpenCV之ROI区域图像叠加和混合

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学工科的皮皮志^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值