商场网站 策划,网站开发协议书 英文版,山东建设厅科技处网站,app购物商城一.addweighted函数作用
addweighted#xff08;#xff09;是OpenCV库中用于图像处理的函数#xff0c;主要功能是将两个输入图像#xff08;尺寸和类型相同#xff09;按照指定的权重进行加权叠加#xff08;图像融合#xff09;#xff0c;并添加一个标量值#x…一.addweighted函数作用
addweighted是OpenCV库中用于图像处理的函数主要功能是将两个输入图像尺寸和类型相同按照指定的权重进行加权叠加图像融合并添加一个标量值如亮度调整。它常用于实现图像混合、特效叠加、亮度调节等视觉效果在计算机视觉应用中广泛用于创建透明效果、淡入淡出过渡或图像增强等场景。
1.函数定义
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst);
参数 src1: 第一个输入图像数组必须是相同尺寸和类型如8位无符号整型的图像 alpha: 第一个图像的权重系数double类型决定 src1 在融合中的贡献程度。例如α0.5 表示 src1 占据50%权重 src2: 第二个输入图像数组尺寸和通道数必须与 src1 完全匹配 beta: 第二个图像的权重系数double类型决定 src2 在融合中的贡献程度。例如 β0.5表示 src2 占据50%权重 gamma: 标量值double类型添加到每个像素上常用于调整输出图像的全局亮度。例如γ0 不改变亮度γ0 增加亮度。 dst: 输出图像数组尺寸和类型与输入相同存储融合结果。 函数执行的运算是基于每个像素点的线性加权和。数学公式如下
dst(i,j)α×src1(i,j)β×src2(i,j)γ 简化公式就是dstα∗src1β∗src2γ
src1(i,j) 和 src2(i,j)src2(i,j) 分别表示两个输入图像在位置 (i,j)(i,j) 的像素值。
α 是第一个图像的权重浮点数。
β 是第二个图像的权重浮点数。
γ是添加到每个像素的标量值通常用于调整整体亮度。
dst(i,j)dst(i,j) 是输出图像在位置 (i,j)(i,j) 的像素值。 公式确保结果通过 saturate_castuchar 处理防止像素值溢出255避免无效的像素值
权重和与 γγ的作用α 和 β 之和通常为1以实现平滑融合如 αβ1但并非绝对要求。γ 可独立调整亮度这类似于在融合后加一个常数偏移
2.例子
c中
#include opencv2/opencv.hpp using namespace cv;
int main() { // 读取图像 Mat img1 imread(image1.jpg, IMREAD_COLOR); Mat img2 imread(image2.jpg, IMREAD_COLOR); Mat dst; // 输出图像 // 调用addWeightedalpha0.1, beta0.9, gamma10增加少量亮度 addWeighted(img1, 0.1, img2, 0.9, 10, dst); // 保存输出 imwrite(output.jpg, dst); return 0; }
二.实战
在实战中我们两个图片的融合分为两个情况一种是两张照片大小不一样一种是大小一样
大小一样的我们就可以只用使用addweighted函数融合不需要建立感兴趣区大小不一样的则需要。 int main(int argc, char * argv[])
{//命令行中选入照片Mat src1imread(argv[1]);//src1原图像的数据Mat src2imread(argv[2]); //src2是LOGO图像的数据//判断src1长度和src2是否相同若不同则进行以下操作if(src1.size!src2.size)//不相同就需要建立感兴趣区{Mat image_roisrc1(Rect(30,30,src2.cols,src2.rows));//在原图像中截取一个可感兴趣区域感兴趣区域double alpha 0.4;//alpha第一个图像的权重值这里是0.4double beta 1-alpha;//beta是第二个图像权重值1- alpha 0.6第二个图像的清晰度较高int gama 0;//gamma默认为0,0就是增强光感addWeighted(image_roi,alpha,src2,beta,gama,image_roi);//调用addWeighted对src1和src2进行图像融合imwrite(addweighted_norsamesize.jpg,src1);}else//大小一样,是融合之后生成一张新的照片{double alpha 0.4;//alpha第一个图像的权重值这里是0.4double beta 1 - alpha;//beta是第二个图像权重值1- alpha 0.6第二个图像的清晰度较高int gamma 0; Mat dst;addWeighted(src1, alpha , src2, beta, gamma, dst); //调用addWeighted对src1和src2进行图像融合imwrite(addweighted_samesize.jpg, dst);}1.大小不一样的图片融合 2.大小一样的图片融合