图像载入,初级图像混合

图像载入,初级图像混合

标配

#include   
#include  

using namespace cv; 

图像读取

Mat imread(const string& filename, intflags=1 );

eg: Mat image = imread(“1.jpg”);

建立窗口容器

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
eg: namedWindow(“第一个窗口”);

在指定窗口显示图像

void imshow(const string& winname, InputArray mat);
eg: imshow(“第一个窗口”,iamge);


感兴趣的区域:ROI

两种定义方法:


//定义一个Mat类型并给其设定ROI区域
Mat imageROI;
//方法一
imageROI=image(Rect(500,250,logo.cols,logo.rows));
//方法二
imageROI=srcImage3(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));

(一)ROI区域图像叠加 –图像掩膜mask和copyTo函数

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

       //【1】读入图像  
       Mat srcImage1= imread("dota_pa.jpg");  
       Mat logoImage= imread("dota_logo.jpg");  
       if(!srcImage1.data ) { printf("你妹,读取srcImage1错误~! \n"); return false; }  
       if(!logoImage.data ) { printf("你妹,读取logoImage错误~! \n"); return false; }  

       //【2】定义一个Mat类型并给其设定ROI区域  
       Mat imageROI= srcImage1(Rect(200,250,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;  
}  

ps:注意关联,具体解释见链接博文;

(二)初级图像混合 –addWeighted函数

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);

第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
第二个参数,alpha,表示第一个数组的权重
第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
第四个参数,beta,表示第二个数组的权重值。
第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
第六个参数,gamma,一个加到权重总和上的标量值。看下面的式子自然会理解。
第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。
dst = src1[I]*alpha+ src2[I]*beta + gamma;

eg:


betaValue= ( 1.0 - alphaValue );
addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);

# 输出即为和输入的两个数组拥有相同的尺寸和通道数的dstImage


相関概念:权重(权重总和上的标量值),深度,尺寸和通道数;