古今中外文史赏析

C#:图片叠加显示

2025-03-14  本文已影响0人  大龙10

1、核心逻辑:

2、参数说明:

3、关键处理:

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);
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读