博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ROI区域图像叠加&初级图像混合 综合实例
阅读量:4678 次
发布时间:2019-06-09

本文共 5350 字,大约阅读时间需要 17 分钟。

将addWeighted函数与ROI函数封装到ROI_LinearBlending中
//---------------------------------【ROI_LinearBlending()】-------------------------------------  // 函数名:ROI_LinearBlending()  // 描述:线性混合实现函数,指定区域线性图像混合.利用cv::addWeighted()函数结合定义  //                     感兴趣区域ROI,实现自定义区域的线性混合  //--------------------------------------------------------------------------------------------  bool ROI_LinearBlending()  {            //【1】读取图像         Mat srcImage4= imread("dota_pa.jpg",1);         Mat logoImage= imread("dota_logo.jpg");            if(!srcImage4.data ) { printf("读取srcImage4错误~! \n"); return false; }         if(!logoImage.data ) { printf("读取logoImage错误~! \n"); return false; }            //【2】定义一个Mat类型并给其设定ROI区域         Mat imageROI;                //方法一         imageROI=srcImage4(Rect(200,250,logoImage.cols,logoImage.rows));         //方法二         //imageROI=srcImage4(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));            //【3】将logo加到原图上         addWeighted(imageROI,0.5,logoImage,0.3,0.,imageROI);            //【4】显示结果         namedWindow("<1>区域线性图像混合示例窗口 ");         imshow("<1>区域线性图像混合示例窗口 ",srcImage4);                 return true;  }

 

#include 
#include
#include
//-----------------------------------【命名空间声明部分】--------------------------------------- // 描述:包含程序所使用的命名空间 //----------------------------------------------------------------------------------------------- using namespace cv; using namespace std; //-----------------------------------【全局函数声明部分】-------------------------------------- // 描述:全局函数声明 //----------------------------------------------------------------------------------------------- bool ROI_AddImage(); bool LinearBlending(); bool ROI_LinearBlending(); //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { system("color 5E"); if(ROI_AddImage()&& LinearBlending( )&&ROI_LinearBlending( )) { cout<
<<"嗯。好了,得出了你需要的图像~! : )"; } waitKey(0); return 0; } //----------------------------------【ROI_AddImage( )函数】---------------------------------- // 函数名:ROI_AddImage() // 描述:利用感兴趣区域ROI实现图像叠加 //---------------------------------------------------------------------------------------------- bool ROI_AddImage() { //【1】读入图像 Mat srcImage1= imread("安妮.jpg"); Mat logoImage= imread("LOL.jpg"); if(!srcImage1.data ) { printf("你妹,读取srcImage1错误~! \n"); return false; } if(!logoImage.data ) { printf("你妹,读取logoImage错误~! \n"); return false; } //【2】定义一个Mat类型并给其设定ROI区域 Mat imageROI= srcImage1(Rect(100,100,logoImage.cols,logoImage.rows)); //【3】加载掩模(必须是灰度图) Mat mask= imread("dota_logo.jpg",0); //【4】将掩膜拷贝到ROI logoImage.copyTo(imageROI,mask); //【5】显示结果 namedWindow("<1>利用ROI实现图像叠加示例窗口"); imshow("<1>利用ROI实现图像叠加示例窗口",srcImage1); return true; } //---------------------------------【LinearBlending()函数】------------------------------------- // 函数名:LinearBlending() // 描述:利用cv::addWeighted()函数实现图像线性混合 //-------------------------------------------------------------------------------------------- bool LinearBlending() { //【0】定义一些局部变量 double alphaValue = 0.5; double betaValue; Mat srcImage2, srcImage3, dstImage; //【1】读取图像 ( 两幅图片需为同样的类型和尺寸 ) srcImage2= imread("大寒.jpg"); srcImage3= imread("小寒.jpg"); if(!srcImage2.data ) { printf("读取srcImage2错误~! \n"); return false; } if(!srcImage3.data ) { printf("读取srcImage3错误~! \n"); return false; } //【2】进行图像混合加权操作 betaValue= ( 1.0 - alphaValue ); addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage); //【3】创建并显示原图窗口 namedWindow("<2>线性混合示例窗口【原图】", 1); imshow("<2>线性混合示例窗口【原图】 ", srcImage2 ); namedWindow("<3>线性混合示例窗口【效果图】 ", 1); imshow("<3>线性混合示例窗口【效果图】 ", dstImage ); return true; } //---------------------------------【ROI_LinearBlending()】------------------------------------- // 函数名:ROI_LinearBlending() // 描述:线性混合实现函数,指定区域线性图像混合.利用cv::addWeighted()函数结合定义 // 感兴趣区域ROI,实现自定义区域的线性混合 //-------------------------------------------------------------------------------------------- bool ROI_LinearBlending() { //【1】读取图像 Mat srcImage4= imread("安妮.jpg",1); Mat logoImage= imread("LOL.jpg"); if(!srcImage4.data ) { printf("读取srcImage4错误~! \n"); return false; } if(!logoImage.data ) { printf("读取logoImage错误~! \n"); return false; } //【2】定义一个Mat类型并给其设定ROI区域 Mat imageROI; //方法一 imageROI=srcImage4(Rect(100,100,logoImage.cols,logoImage.rows)); //【3】将logo加到原图上 addWeighted(imageROI,0.5,logoImage,0.3,0.,imageROI); //【4】显示结果 namedWindow("<4>区域线性图像混合示例窗口 "); imshow("<4>区域线性图像混合示例窗口 ",srcImage4); return true; }

首先是经过背景颜色修改的console窗口:

然后依次是四张效果图:

 

 

 

 

 

转载于:https://www.cnblogs.com/Memroy-chen/p/6043993.html

你可能感兴趣的文章
Pro Android学习笔记(三二):Menu(3):Context菜单
查看>>
java中用StringBuffer写文件换行
查看>>
c#ASP.NET中页面传值共有这么几种方式
查看>>
ios 截屏
查看>>
vue2.0 路由学习笔记
查看>>
甲骨文发布JSR 356 针对WebSocket的Java API
查看>>
[转]JAVA回调机制(CallBack)详解
查看>>
vue组件库(五):icon管理
查看>>
Apache Hadoop 和Hadoop生态圈
查看>>
Ctrl+Enter 选中文本提交
查看>>
android WIFI
查看>>
常用的匹配正则表达式和实例
查看>>
小组成员及其git链接
查看>>
SQL case when else
查看>>
JAVA学习之路(环境配置,)
查看>>
Task.WaitAll代替WaitHandle.WaitAll
查看>>
MVc Identity登陆锁定
查看>>
cdn连接失败是什么意思_关于CDN的原理、术语和应用场景那些事
查看>>
ultraedit26 运行的是试用模式_免费试用U盘数据恢复工具 – 轻松找回U盘丢失的各种数据!...
查看>>
怎么从转移特性曲线上看dibl_白话IVD中的流体——泵的流量特性与管路阻力特性...
查看>>