C#:图片叠加显示

作者: 大龙10 | 来源:发表于2025-03-14 18:15 被阅读0次

1、核心逻辑:

  • 使用Mat类加载两张图片
  • 使用AddWeighted方法进行图像混合(线性叠加)

2、参数说明:

  • 第2个参数:第一张图的权重(alpha)

  • 第4个参数:第二张图的权重(beta)

  • 第5个参数:gamma值(亮度调节)

3、关键处理:

  • 检查图片尺寸一致性

  • 资源释放管理(使用using语句)

  • Mat到Bitmap的转换

  • 混合参数可根据需求调整(alpha + beta 不需要等于1)

4、程序

using System;
using System.Drawing;
using System.Windows.Forms;
using OpenCvSharp;

namespace ImageOverlayWinForm
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            this.Text = "Image Overlay Demo";
            this.Size = new Size(800, 600);

            // 创建控件
            var btnProcess = new Button { Text = "Process", Location = new Point(10, 10) };
            var pictureBox1 = new PictureBox { Location = new Point(10, 50), Size = new Size(300, 300) };
            var pictureBox2 = new PictureBox { Location = new Point(320, 50), Size = new Size(300, 300) };
            var pictureBoxResult = new PictureBox { Location = new Point(10, 360), Size = new Size(600, 200) };

            btnProcess.Click += (sender, e) =>
            {
                try
                {
                    // 加载图片(修改为你的图片路径)
                    using (var mat1 = new Mat(@"D:\image1.jpg"))
                    using (var mat2 = new Mat(@"D:\image2.jpg"))
                    {
                        // 检查图片是否加载成功
                        if (mat1.Empty() || mat2.Empty())
                        {
                            MessageBox.Show("Failed to load images!");
                            return;
                        }

                        // 检查图片尺寸是否相同
                        if (mat1.Size() != mat2.Size())
                        {
                            MessageBox.Show("Images must have the same dimensions!");
                            return;
                        }

                        // 创建结果矩阵
                        using (var result = new Mat())
                        {
                            // 图像叠加(alpha=0.5 各占50%透明度)
                            Cv2.AddWeighted(mat1, 0.5, mat2, 0.5, 0, result);

                            // 显示结果
                            pictureBoxResult.Image?.Dispose();
                            pictureBoxResult.Image = MatToBitmap(result);
                        }

                        // 显示原始图片(可选)
                        pictureBox1.Image?.Dispose();
                        pictureBox1.Image = MatToBitmap(mat1);
                        pictureBox2.Image?.Dispose();
                        pictureBox2.Image = MatToBitmap(mat2);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error: {ex.Message}");
                }
            };

            Controls.Add(btnProcess);
            Controls.Add(pictureBox1);
            Controls.Add(pictureBox2);
            Controls.Add(pictureBoxResult);
        }

        // 将Mat转换为Bitmap
        private Bitmap MatToBitmap(Mat mat)
        {
            return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
        }
    }
}

相关文章

  • Flutter开发中的问题小结

    图片的圆角不显示的问题 原因:Container的由三层图层叠加组成,decoration,child,foreg...

  • iOS图片叠加

    在做QQ、微信分享时,需要做图片叠加。因服务端返回的图片一般是jpg(1x),和本地图片的scale(2x或3x)...

  • 图片色彩叠加

    当我们想在一个彩色图片上用一种颜色标识出相关信息,同时不覆盖原有信息,一个简单的方式是直接取各自RGB通道的数值,...

  • iOS_UIImage显示GIF图

    一、原理 gif的显示是图片的叠加,因此可以根据这个特征来实现我们的想法: 使用ImageIO库中的CGImage...

  • 绘制力场 鼠标拖动,叠加相应的力到场上 显示场 粒子 添加粒子 粒子受到力场影响 触边检测 使用图片 粒子使用背景...

  • 无标题文章

    C#: //这里显示一些代码,在正文显示中会自动识别语言,进行代码染色,这是一段C#代码 public...

  • OpenCV(Emgu)入门系列(9):在C#中,使用Emgu+

    有了之前使用Emgu读取图片并显示在C#的PictureBox中的实践,今天使用相同的思路实现一个视频播放器。 任...

  • dstat简介

    -c:显示cpu相关信息 -C#,#,...,total -d:显示disk相关信息 -Dtotal,sda,sd...

  • 连续的图像边框

    主要的思路就是在背景图片之上,再叠加一层纯白的实色背景。为了让下层的图片背景透过边框区域显示出来,我们需要给两层背...

  • 两张图片合成一张

    //案例三:输出->图片叠加->新图片intmain(intargc,char** argv ){ //注意事项...

网友评论

    本文标题:C#:图片叠加显示

    本文链接:https://www.haomeiwen.com/subject/chtvmjtx.html