先上代码

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>using namespace cv;
using namespace std;bool ROI_AddImage();
bool LinearBlending();
bool ROI_LinearBlending();int main(int argc, char** argv)
{//system("color 5E");if (ROI_AddImage() && LinearBlending() && ROI_LinearBlending()){cout << endl << "运行成功,得到了想要的图像";}ROI_AddImage();waitKey(0);return 0;
}bool ROI_AddImage() {//利用感兴趣区域ROI实现图像叠加//1.读入图像Mat srcImage1 = imread("erha.jpg");Mat logoImage = imread("logo.png");if (!srcImage1.data){cout << "读入srcImage1错误" << endl;return false;}if (!logoImage.data){cout << "读入logoImage错误" << endl;return false;}//2.定义一个Mat类型并给其设定ROI区域Mat imageROI = srcImage1(Rect(200, 250, logoImage.cols, logoImage.rows));//3.加载掩膜 必须是灰度图Mat mask = imread("logo.png", 0);//4.将掩膜赋值到ROIlogoImage.copyTo(imageROI, mask);//5.显示结果namedWindow("用ROI实现叠加窗口");imshow("用ROI实现叠加窗口", srcImage1);return true;
}bool LinearBlending() {//用addweight函数实现图像线性混合Mat srcImage2, srcImage3, dstImage;//读取图像srcImage2 = imread("3.jpg");srcImage3 = imread("4.jpg");addWeighted(srcImage2, 0.5, srcImage3, 0.5, 0.0, dstImage);//创建并显示窗口namedWindow("线性混合窗口原图");imshow("线性混合窗口原图", srcImage2);namedWindow("线性混合窗口效果图");imshow("线性混合窗口效果图", dstImage);return true;
}bool ROI_LinearBlending() {Mat srcImage, logoImage;srcImage = imread("erha.jpg");logoImage = imread("logo.png");Mat imageROI = srcImage(Range(250, 250 + logoImage.rows), Range(200, 200 + logoImage.cols));//将logo加到原图上addWeighted(imageROI, 0.5, logoImage, 0.5, 0.0, imageROI);//显示结果namedWindow("区域线性图像混合");imshow("区域线性图像混合", srcImage);return true;
}

效果

解析

今天也是对之前学习的一些总结

ROI_AddImage函数是利用感兴趣区域ROI实现图像的叠加

LinearBlending函数是利用addweight函数对图像进行线性混合

ROI_LinearBlending函数在利用感兴趣区域ROI对图像进行线性混合

可能唯一有疑惑的就是ROI_LinearBlending函数为什么输出的感兴趣区域的矩阵,为什么显示原图时,原图会发生变化:Mat在初始化的时候,只有Copyto函数和clone函数才会真正的把数据拷贝出来一份,其他赋值只会复制指针区域,也就是说我们只是拷贝了一份指向相同位置的指针,修改的还是同一份数据。

对了,还有点奇怪为什么掩膜必须是灰度图,后面再看看,再转回来解决这个疑问把。

OpenCV之图像混合相关推荐

  1. 转载:【OpenCV入门教程之五】 分离颜色通道多通道图像混合

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...

  2. 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析

    [OpenCV入门教程之四] ROI区域图像叠加&初级图像混合 全剖析 浅墨_毛星云 2014-03-10 12:48:05 157425 收藏 19 最后发布:2014-03-10 12:4 ...

  3. 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...

  4. OpenCV学习笔记五-图像混合

    将两张图片混合 P6 图像混合 #include<iostream> #include<opencv2/opencv.hpp>using namespace std; usin ...

  5. QT+OpenCV综合示例:图像混合(滑动条)

    QT+OpenCV综合示例:图像混合(滑动条) 1.代码: 2.运行结果: 0)Widget_op.ui (界面文件)设计: 1.代码: 1)opencv_imwrite_Q.pro 添加: INCL ...

  6. python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像 ...

  7. OpenCV之图像的混合

    OpenCV之图像的混合(混合函数Core.addWeighted()) 混合函数         f0(x).f1(x)相当于图片,通过上面的线性函数分别给两个图片的矩阵中的每个元素乘以对应的系数然 ...

  8. 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合

    1. 访问图像中像素的三种方式 任何图像处理算法,都是从操作每个像素开始的.在OpenCV中,提供了三种访问每个像素的方法. 方法1:指针访问:C操作符[] 方法2:迭代器iterator 方法3:动 ...

  9. OpenCV系列四 --- 颜色通道分离与多通道图像混合

    今天呢,我们一起来学习彩色图像的颜色通道分离与多通道图像混合,一般情况下,我们大多数看到的图像都是基于RGB颜色通道的图像,因此要实现颜色通道的分离,即要将R.G.B三个通道分离,而多通道图像混合,即 ...

最新文章

  1. 模板设计模式_设计模式-模板方法模式
  2. python3 str bytes 字符串 字节 互相转换
  3. h5现实手机管理系统_webflash,后台管理系统
  4. 退出登录后点返回键 是登录状态_看了这50条登录的测试点,你还敢说测试很容易吗...
  5. python中文件打开与关闭操作命令
  6. vs资源视图加载失败
  7. 云网络开山之作,揭秘云上高速公路的十年技术成果!
  8. 中国的 GitHub 要来了?
  9. 分页解决方案 之 分页算法——Pager_SQL的思路和使用方法
  10. nginx+Keeplive高可用集群部署
  11. 计算机execl必背知识点,【分享】Excel必备基础知识(1)
  12. 继电保护整定值计算软件_通用型继电保护整定计算软件的分析.pdf
  13. python——田字格
  14. 游戏开发者注意了,小心触犯任天堂的这些专利
  15. eclipse使用技巧整理
  16. 通达信板块监控指标_通达信辅助判断指标公式行业板块看盘幅图
  17. 蚂蚁金服软件测试开发工程师电话面试记录
  18. 参观计算机实验室后的感想,学习参观物联网感知实验室
  19. 基于PHP+小程序(MINA框架)+Mysql数据库的名宿酒店预订小程序系统设计与实现
  20. C#中WindowsForm常见控件的运用 -- - 李晓峰

热门文章

  1. A - 还是畅通工程(最小生成树)
  2. HDU_2156 分数矩阵
  3. VMWare File Format Learning Use VHD File To Boot VMWare CoreOS Docker Configuration And Runnin...
  4. 【javascript】基于javascript的小时钟
  5. context-param标签含义及与init-param标签的异同(转)
  6. Asp.net.Ajax控件学习
  7. Introducing Blackle, the energy saving search
  8. Seq2Seq中的Attention
  9. IBatis的resultMap使用
  10. 201521123009 《Java程序设计》第11周学习总结