图像载入,初级图像混合
标配
#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; } 1>1>
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
相関概念:权重(权重总和上的标量值),深度,尺寸和通道数;