Opencv学习笔记(⼀):图像融合函数addWeighted
正在学习Opencv,把学习过程中的⼀些知识点记录下,以供⽇后翻阅,也给同在学习的朋友参考,有不周全之处,敬请指点。
第⼀篇学习笔记,mark⼀下。
addWeighted是线性图像融合函数,可以把两张图⽚叠加在⼀起
1、ROI
这⾥⾯经常会提到⼀个名词ROI,即:感兴趣区域,在要处理的图像中提取出的要处理的区域。⽐如,你要把 图A 融合进 图B 中的⼀块区域内,那么图B中的这块区域就是你的图像处理所关注的重点,你只要对这块区域进⾏处理就可以了,可以提⾼处理效率。
2、函数说明
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
src1:    图1,可以理解为背景图⽚
alpha:  图1的权重,即融合⽐例
src2:    图2,即要融合的图⽚
beta:    图2的权重;
gamma:偏移量
dst:      融合后的图⽚
dtype:  输出阵列的可选深度
其中两个权重值还没有完全理解,取0~1时,基本上是⼀个透明度,⼤于1的话会有⼀些图像的处理在,有待⽇后进⼀步研究。gamma:偏移量这个参数也没有完全理解,取值很⼤时图像会变⽩。(看来图像处理这⼀块还有很多东西要学啊)。
3、使⽤函数
有⼀个问题需要注意,两个图⽚的尺⼨是要求⼀样的,如果尺⼨不同可以⽤两个函数解决,⼀个是使⽤resize函数调整图⽚的⼤⼩,⼀个是只处理感兴趣区域,即在图⽚1上选取⼀块和图⽚2⼀样尺⼨的区域,然后只对此块区域进⾏处理
尺⼨⼀样时:
Mat image1 = imread("");
Mat image2 = imread("");
Mat dstImage;
addWeighted(image1,0.5, image2, 0.5, 0, dstImage);
namedWindow("test", WINDOW_NORMAL);
imshow("test", image1);
尺⼨不同时,以ROI为例:
Mat image1 = imread("");
Mat image2 = imread("");
Mat imageROI = image1(Rect(100, 100, ls, ws));
resize函数c++addWeighted(imageROI, 0.5, image2, 0.5, 0, imageROI );
namedWindow("test", WINDOW_NORMAL);
imshow("test", image1);