OpenCvSharp学习笔记5--两幅图像求和(叠加)

目的

使用AddWeighted对两幅图像求和

dst=α⋅src1+β⋅src2+γ

图像1

图像2

效果

AddWeighted权重相加

函数说明:使用权重叠加两个数组(Array)。输出类型为CV_32S时,没有进行饱和操作(Saturation),可能得到一个符号不正确的溢出结果。

dst(I)=saturate(src1(I)∗alpha+src2(I)∗beta+gamma)

//函数原型
void AddWeighted(InputArray src1,
    double alpha,
    InputArray src2,
    double beta,
    double gamma,
    OutputArray dst,
    int dtype = -1)

参数

说明

InputArray src1

输入数组1

double alpha

数组1的权重

InputArray src2

输入数组2

double beta

数组2的权重

double gamma

加到各和的标量(如调暗或调亮)

OutputArray dst

输出数组:大小与通道数组与输入一致

int dtype

输出数组的深度,当src1与src2的深度一样时,该值为-1时,结果与src1相同。

源码示例

Mat src1;
Mat src2;
string winName = "Linear Blend";
int alpha = 50;
int gamma = 0;
public void Run() {
    src1 = Cv2.ImRead(ImagePath.WindowsLogo);
    if (src1.Empty()) throw new Exception($"图像打开有误:{ImagePath.WindowsLogo}");

    src2 = Cv2.ImRead(ImagePath.LinuxLogo);
    if (src2.Empty()) throw new Exception($"图像打开有误:{ImagePath.LinuxLogo}");
    
    var alphaTrackBarName = "alpha%";
    var gammaTrackBarName = "gamma";

    Cv2.NamedWindow(winName, WindowFlags.AutoSize);
    Cv2.CreateTrackbar(alphaTrackBarName, winName, ref alpha, 100, OnChange);
    Cv2.CreateTrackbar(gammaTrackBarName, winName, ref gamma, 255, OnChange);

    Cv2.WaitKey();
    Cv2.DestroyAllWindows();
}

private void OnChange(int pos, IntPtr intPtr) {
    double alphaD = alpha / 100D;
    double beta = 1 - alphaD;
    using var dst = new Mat();
    Cv2.AddWeighted(src1, alphaD, src2, beta, gamma, dst, -1);

    Cv2.PutText(dst, $"alpha={alphaD.ToString("0.00")},beta={beta.ToString("0.00")},gamma={gamma}", new Point(10, 15), HersheyFonts.HersheySimplex, 0.5, Scalar.Red);
    Cv2.ImShow(winName, dst);
}

参考

https://docs.opencv.org/4.7.0/d5/dc4/tutorial_adding_images.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图南科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值