C#:图像调亮

一、图像调亮

  • 调整亮度通常可以通过增加每个像素的值来实现,比如加上一个常数,或者乘以一个系数。
    使用ConvertTo方法,或者遍历每个像素加上一个值。不过ConvertTo更高效,可以指定缩放因子和增量。
    比如,乘以1.0(不改变对比度),然后加上一个beta值增加亮度。
    例如,beta设为50,这样每个像素值增加50,但要注意溢出,超过255的要截断为255。OpenCv的ConvertTo会自动处理截断,所以用这个方法比较好。

二、程序

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;


namespace Ky_Brighten
{
    public partial class Form1 : Form
    {
        private Mat originalMat;
        public Form1()
        {
            InitializeComponent();
        }

        private void BtnOpen_Click(object sender, EventArgs e)
        {
            using (var openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "Image Files|*.jpg;*.png;*.bmp";
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        // 释放之前的图像资源
                        originalMat?.Dispose();
                        // 读取图像(BGR格式)
                        originalMat = Cv2.ImRead(openFileDialog.FileName, ImreadModes.Color);
                        if (originalMat.Empty())
                        {
                            MessageBox.Show("无法加载图像!");
                            return;
                        }
                        // 转换为RGB格式并显示
                      //  Cv2.CvtColor(originalMat, originalMat, ColorConversionCodes.BGR2RGB);
                        pictureBoxOriginal.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(originalMat);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"加载图像出错: {ex.Message}");
                    }
                }
            }
        }

        private void BtnBrighten_Click(object sender, EventArgs e)
        {
            if (originalMat == null || originalMat.Empty())
            {
                MessageBox.Show("请先打开图像!");
                return;
            }

            try
            {
                // 调整亮度参数(beta值控制亮度)
                int beta = 50;
                beta = trackBar1.Value;
                Mat brightenedMat = new Mat();
                originalMat.ConvertTo(brightenedMat, -1, 1, beta);

                // 显示结果
                pictureBoxResult.Image?.Dispose();
                pictureBoxResult.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(brightenedMat);

                // 释放资源
                brightenedMat.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"处理图像出错: {ex.Message}");
            }
        }
        // 窗体关闭时释放资源

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            originalMat?.Dispose();
           
        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容