ROI区域图像叠加&初级图像混合 综合实例

将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 <cv.h>
#include <highgui.h>
#include <iostream>  

//-----------------------------------【命名空间声明部分】---------------------------------------
//     描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
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<<endl<<"嗯。好了,得出了你需要的图像~! : )";
       }  

       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窗口:

然后依次是四张效果图:

时间: 2024-12-05 11:39:38

ROI区域图像叠加&初级图像混合 综合实例的相关文章

【OpenCV入门教程之四】 ROI区域图像叠加&amp;初级图像混合 全剖析(转)

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20911629 作者:毛星云(浅墨)    邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.8 在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像

ROI区域图像叠加

//----------------------------------[ROI_AddImage( )函数]---------------------------------- // 函数名:ROI_AddImage() // 描述:利用感兴趣区域ROI实现图像叠加 //---------------------------------------------------------------------------------------------- bool ROI_AddImage(

opencv学习笔记-图像叠加、混合

在图像处理中,目标区域定义为感兴趣区域ROI(region of Interest),这是后期图像处理的基础,在获取ROI后,进行一些列的处理.ROI区域在Opencv中就是Rect,先构建Rect,然后给予ROI一些特点,形成了图像掩膜. 一.ROI创建 //定义一个Mat类型并给其设定ROI区域 Mat imageROI; //方法一 imageROI=image(Rect(500,250,logo.cols,logo.rows)); //方法二 imageROI=Image(Range(2

Atitti 图像处理 图像混合 图像叠加&#160;blend 原理与实现

Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不仅用于广泛使用的Photoshop中,也应用于AfterEffect.llustrator . Dreamweaver. Fireworks等软件.主要功效是可以用不同的方法将对象颜色与底层对象的颜色混合.当您将一种混合模式应用于某一对象时,在此对象的图层或组下方的任何对象上都可看到混合模式的效果.

【OpenCV】复制、切割出图像ROI区域

对图像设定ROI的函数是: cvSetImageROI(IplImage* src,CvRect rect); src 表示的是源图像, rect 指的是ROI区域. 如果要取消ROI区域,那么使用函数: cvResetImageROI(IplImage* src); 这个函数,就把src上的ROI区域取消掉. 举例: #include <opencv/cv.h> #include <opencv2/highgui/highgui.hpp> using namespace cv;

Opencv 图像叠加 添加水印

Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, InputArray mask) const 这个函数可以复制图像到另一个图像或矩阵上,可选参数是掩码 由于叠加的图像大小不一定相等,比如我们这里把一张小照片加到一张大照片上 我们可以在大照片上设置一个和小照片一样大的感兴趣区域 不使用掩码的时候,我们载入一张png,和一张jpg #include <op

自制操作系统(十) 图像叠加处理

2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601  欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画,便可以实现叠加的效果.例如,屏幕背景+一个窗口+鼠标的情况. 例如下面的情形: 计算机桌面上有三个窗口程序,A.B.C.B位于A之上,C位于B之上.要实现这种效果,只需要,先画A(盖住了桌面一部分).再画B(盖住了A和桌面一部分).再画C(盖住了B和桌面一部分).然后每隔一定时间刷新画面即可. 为此引入一个图

图像叠加,渐变,透明,水印原理

基本原理, 图像A,图像B,叠加后输出的图像C; Ci=Ai*a + (1-a)*Bi; i 表示第几个像素点; 对于32位的真色彩图像,存放格式有RGBA,ARGB,即4个通道; A即alpha通道值,即这样的图像可以用高8位或低8位(RGBA)来实现图像的透明程度, 0 <= a <= 1, 最小值为0,即完全透明,最大值为1,即不透明,全部显示; a值要与像素点中的每个通道的值进行相乘,得到新的像素点各通道值; 比如,0x80FFFF00是50%透明的黄色,0x80是128,大约是255

[OpenCV] 4、图像叠加 addWeighted

>_<" 这次主要是图像叠加的基本操作: >_<" cv::addWeighted(imageROI, 1.0, logo, 0.6, 0, imageROI);即:目标像素=src1*alpha+src2*beta 1 #include <iostream> 2 #include <opencv2/highgui/highgui.hpp> 3 #include <opencv2/core/core.hpp> 4 5 usin