一、简述addWeighted函数
1、作用:可以将两张相同大小,相同类型的图片融合。可以实现图片的多种特效
2、c++原型:

参数一:src1,表示第一个原数组(图片1)
参数二:alpha,第一个数组元素权重
参数三:src2,第二个原数组(图片2)
参数四:beta,第二个数组元素权重
参数五:gamma,一个加到权重总和上的标量值(见下面公式)。不要太大,不然图片一片白。总和等于255以上就是纯白色了
参数六:dst,输出的图片,它和输入的两个数组拥有相同的尺寸和通道数
参数七:dtype ,输出阵列的可选深度,有默认值-1;当两个输入数组具有相同的深度时,这个参数设置为-1
addweighted函数的计算公式:
dst = src1[i] * alpha + src2[i] * beta + gamma
二、代码
//功能:参数传递调整亮度、对比度
static void adjust_light(int pos ,void* userdata)
{
Mat img = *((Mat*)userdata);
Mat dst = Mat::zeros(img.size(),img.type());
Mat m = Mat::zeros(img.size(),img.type());
m = Scalar(pos,pos,pos);
addWeighted(img,1.0,m,0,pos,dst);//融合两张图
imshow("adjust_light_and_contrast",dst);
}
static void adjust_contrast(int pos, void* userdata)
{
Mat img = *((Mat*)userdata);
Mat dst = Mat::zeros(img.size(),img.type());
Mat m = Mat::zeros(img.size(),img.type());
m = Scalar(pos,pos,pos);
double contrast = pos /100.0;
addWeighted(img,contrast,m,0.0,0,dst);//融合两张图
imshow("adjust_light_and_contrast",dst);
}
void test1::adjust_light_contrast(Mat &image)
{
namedWindow("adjust_light_and_contrast",WINDOW_FREERATIO);
int lightValue = 50;
int maxValue = 100;
int contrastValue = 100;
createTrackbar("light-bar","adjust_light_and_contrast",&lightValue,maxValue,adjust_light,(void *)(&image));
createTrackbar("contrast-bar","adjust_light_and_contrast",&contrastValue,maxValue+100,adjust_contrast,(void *)(&image));
adjust_light(50,&image);
}
注:
1、createTrackbar函数的用法在上篇文章有阐述,
2、如果没有写 adjust_light(50,&image);这一句将会导致adjust_light_and_contrast窗口一开始为黑色
main中测试:

三、实现效果
input窗口为原始图片

动图如下:
原创不易,转载请注明出处:


--参数传递调整亮度、对比度&spm=1001.2101.3001.5002&articleId=122719305&d=1&t=3&u=af29e5b9cd4946a1bcfe10a97cc6766b)
1333

被折叠的 条评论
为什么被折叠?



