问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C# OpenCvSharp 图像锐化:让你的图片焕发细节之美!

创作时间:
作者:
@小白创作中心

C# OpenCvSharp 图像锐化:让你的图片焕发细节之美!

引用
CSDN
1.
https://blog.csdn.net/sD7O95O/article/details/138986050

图像锐化是计算机视觉和图像处理中的一个重要技术,可以增强图像的细节和清晰度。本文将介绍如何使用C#和OpenCvSharp库实现两种图像锐化方法:传统的卷积核锐化和USM(Unsharp Mask)锐化算法。通过本文,你将学习到图像锐化的原理和具体实现代码。

效果展示

让我们先来看看图像锐化的效果:


USM锐化算法原理

USM锐化算法是一种常用的图像锐化方法,其基本步骤如下:

  1. 对原图像进行高斯滤波
  2. 用原图像像素值减去一个系数乘以高斯滤波后的图像像素值
  3. 将得到的像素值归一化到0~255范围内

USM锐化公式为:
(源图像 - w * 高斯模糊) / (1 - w)
其中w表示权重,通常取值范围为0.1~0.9,默认值为0.6。

USM锐化算法可以去除一些细小的干扰细节和图像噪声,相比直接使用卷积核锐化得到的图像更可靠。

项目实现

下面是一个完整的C# WinForms程序示例,实现了图像加载、卷积核锐化和USM锐化功能。

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

namespace OpenCvSharp_图像锐化
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string imgPath = "";
        Mat mat;

        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;
            pictureBox1.Image = null;
            imgPath = ofd.FileName;
            pictureBox1.Image = new Bitmap(imgPath);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image == null)
            {
                return;
            }
            mat = new Mat(imgPath);
            // 定义锐化卷积核
            InputArray kernel = InputArray.Create<float>(new float[3, 3] {
                { 0, -1, 0 },
                { -1, 5, -1 },
                { 0, -1, 0 }
            });

            Cv2.Filter2D(mat, mat, mat.Type(), kernel);
            Cv2.ConvertScaleAbs(mat, mat);
            if (pictureBox2.Image != null)
            {
                pictureBox2.Image.Dispose();
            }
            pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
        }

        /// <summary>
        /// USM锐化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image == null)
            {
                return;
            }
            mat = new Mat(imgPath);
            Mat blur = new Mat();
            Mat usm = new Mat();

            Cv2.GaussianBlur(mat, blur, new OpenCvSharp.Size(0, 0), 25);
            Cv2.AddWeighted(mat, 1.5, blur, -0.5, 0, usm);
            blur.Dispose();
            if (pictureBox2.Image != null)
            {
                pictureBox2.Image.Dispose();
            }
            pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(usm);
        }
    }
}

总结

通过本文,你已经学习了图像锐化的两种方法:卷积核锐化和USM锐化算法。同时,通过一个完整的C# WinForms程序示例,你可以快速上手实践这些技术。希望本文对你有所帮助,祝你在图像处理领域取得更好的成果!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号