欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現(xiàn)圖片邊緣銳化的完整代碼

 更新時間:2024年06月24日 09:14:35   作者:新鑫S  
在 C# 中進行圖像的邊緣銳化,可以通過卷積濾波器實現(xiàn),邊緣銳化的基本思想是通過卷積核(也稱為濾波器或掩模)來增強圖像中的邊緣,下面是如何在 C# 中實現(xiàn)這一操作的完整代碼,需要的朋友可以參考下

在 C# 中進行圖像的邊緣銳化,可以通過卷積濾波器實現(xiàn)。邊緣銳化的基本思想是通過卷積核(也稱為濾波器或掩模)來增強圖像中的邊緣。我們可以使用一個簡單的銳化核,例如:

[ 0, -1,  0][-1,  5, -1][ 0, -1,  0]

這個卷積核可以用于增強圖像中的邊緣。下面是如何在 C# 中實現(xiàn)這一操作的完整代碼,包括加載圖像、應(yīng)用銳化濾波器和保存結(jié)果圖像。

1. 安裝 System.Drawing.Common

確保你已經(jīng)安裝了 System.Drawing.Common 庫。你可以通過NuGet包管理器安裝它,或者使用以下命令:

dotnet add package System.Drawing.Common

2. 編寫卷積濾波器應(yīng)用方法

using System;using System.Drawing;using System.Drawing.Imaging;
public class ImageProcessor
{
    public static Bitmap ApplyConvolutionFilter(Bitmap sourceImage, float[,] kernel)
    {
        int width = sourceImage.Width;
        int height = sourceImage.Height;
        BitmapData srcData = sourceImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
        Bitmap resultImage = new Bitmap(width, height);
        BitmapData resultData = resultImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

        int bytesPerPixel = 4;
        int stride = srcData.Stride;
        IntPtr srcScan0 = srcData.Scan0;
        IntPtr resultScan0 = resultData.Scan0;
        int kernelWidth = kernel.GetLength(1);
        int kernelHeight = kernel.GetLength(0);
        int kernelOffset = kernelWidth / 2;

        unsafe
        {
            byte* srcPtr = (byte*)srcScan0.ToPointer();
            byte* resultPtr = (byte*)resultScan0.ToPointer();

            for (int y = kernelOffset; y < height - kernelOffset; y++)
            {
                for (int x = kernelOffset; x < width - kernelOffset; x++)
                {
                    float blue = 0.0f;
                    float green = 0.0f;
                    float red = 0.0f;

                    for (int ky = -kernelOffset; ky <= kernelOffset; ky++)
                    {
                        for (int kx = -kernelOffset; kx <= kernelOffset; kx++)
                        {
                            int pixelPos = ((y + ky) * stride) + ((x + kx) * bytesPerPixel);
                            blue += srcPtr[pixelPos] * kernel[ky + kernelOffset, kx + kernelOffset];
                            green += srcPtr[pixelPos + 1] * kernel[ky + kernelOffset, kx + kernelOffset];
                            red += srcPtr[pixelPos + 2] * kernel[ky + kernelOffset, kx + kernelOffset];
                        }
                    }

                    int resultPos = (y * stride) + (x * bytesPerPixel);
                    resultPtr[resultPos] = (byte)Math.Min(Math.Max(blue, 0), 255);
                    resultPtr[resultPos + 1] = (byte)Math.Min(Math.Max(green, 0), 255);
                    resultPtr[resultPos + 2] = (byte)Math.Min(Math.Max(red, 0), 255);
                    resultPtr[resultPos + 3] = srcPtr[resultPos + 3]; // Copy alpha channel
                }
            }
        }

        sourceImage.UnlockBits(srcData);
        resultImage.UnlockBits(resultData);

        return resultImage;
    }
}

3. 使用卷積濾波器進行邊緣銳化

編寫一個主程序來加載圖像、應(yīng)用銳化濾波器并保存結(jié)果圖像。

using System;using System.Drawing;
class Program
{
    static void Main()
    {
        // 加載原始圖像
        Bitmap sourceImage = new Bitmap("path_to_your_image.jpg");

        // 定義銳化卷積核
        float[,] sharpenKernel = new float[,]
        {
            { 0, -1,  0 },
            { -1,  5, -1 },
            { 0, -1,  0 }
        };

        // 應(yīng)用銳化濾波器
        Bitmap resultImage = ImageProcessor.ApplyConvolutionFilter(sourceImage, sharpenKernel);

        // 保存處理后的圖像
        resultImage.Save("path_to_save_sharpened_image.jpg");
    }
}

圖像對比:

  • 原圖:

  • 處理后:

注意事項

  • 確保路徑 path_to_your_image.jpg 和 path_to_save_sharpened_image.jpg 是正確的。
  • 調(diào)整卷積核可以改變銳化效果。上面使用的是一個常見的銳化卷積核。
  • System.Drawing 命名空間需要 System.Drawing.Common 包,在 .NET Core 或 .NET 5/6 中需要特別注意包的引用。

通過這些步驟,你可以在 C# 中實現(xiàn)圖像的邊緣銳化。這個實現(xiàn)使用了卷積濾波器來增強圖像的邊緣,從而使圖像更加清晰。

到此這篇關(guān)于C#實現(xiàn)圖片邊緣銳化的完整代碼的文章就介紹到這了,更多相關(guān)C#圖片邊緣銳化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淘寶IP地址庫采集器c#代碼

    淘寶IP地址庫采集器c#代碼

    這篇文章主要介紹了淘寶IP地址庫采集器c#代碼,有需要的朋友可以參考一下
    2013-12-12
  • C#怎樣才能將XML文件導入SQL Server

    C#怎樣才能將XML文件導入SQL Server

    怎樣才能將XML文件導入SQL Server 2000,主要使用了接口以及簡單工廠來實現(xiàn)將xml文件導入到sql數(shù)據(jù)庫中,將XML文件導入SQL Server有若干種方法,這里提供其中的3種需要的朋友可以參考下
    2012-12-12
  • C# 調(diào)用命令行執(zhí)行Cmd命令的操作

    C# 調(diào)用命令行執(zhí)行Cmd命令的操作

    這篇文章主要介紹了C# 調(diào)用命令行執(zhí)行Cmd命令的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#實現(xiàn)將DataTable內(nèi)容輸出到Excel表格的方法

    C#實現(xiàn)將DataTable內(nèi)容輸出到Excel表格的方法

    這篇文章主要介紹了C#實現(xiàn)將DataTable內(nèi)容輸出到Excel表格的方法,較為詳細的分析了C#基于DataTable保存Excel數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)String字符串轉(zhuǎn)化為SQL語句中的In后接的參數(shù)詳解

    C#實現(xiàn)String字符串轉(zhuǎn)化為SQL語句中的In后接的參數(shù)詳解

    在本篇文章中小編給大家分享的是一篇關(guān)于C#實現(xiàn)String字符串轉(zhuǎn)化為SQL語句中的In后接的實例內(nèi)容和代碼,需要的朋友們參考下。
    2020-01-01
  • 圖解如何使用C#創(chuàng)建Windows服務(wù)

    圖解如何使用C#創(chuàng)建Windows服務(wù)

    本文主要介紹了圖解如何使用C#創(chuàng)建Windows服務(wù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C#如何檢測操作系統(tǒng)版本

    C#如何檢測操作系統(tǒng)版本

    這篇文章主要為大家詳細介紹了C#如何檢測操作系統(tǒng)版本的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 基于DateTime.ParseExact方法的使用詳解

    基于DateTime.ParseExact方法的使用詳解

    本篇文章是對DateTime.ParseExact方法的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中#include頭文件的示例詳解

    C++中#include頭文件的示例詳解

    在C++中,所有的文件操作,都是以流(stream)的方式進行的,fstream也就是文件流file stream。這篇文章主要介紹了C++中#include頭文件,需要的朋友可以參考下
    2020-02-02
  • 通過C#程序操作Config文件

    通過C#程序操作Config文件

    這篇文章介紹了通過C#程序操作Config文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論