c#数字图像处理的3种方法示例分享


在C#中进行数字图像处理,通常会利用一些专门的库,如System.Drawing(适用于Windows Forms应用程序)或更强大的图像处理库如OpenCV的.NET封装版。由于篇幅限制,这里我将为你提供三个简单的示例,使用System.Drawing来展示数字图像处理的基本方法:

### 示例 1: 加载并显示图像


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

public class ImageDisplay : Form
{
    private PictureBox pictureBox;

    public ImageDisplay()
    {
        pictureBox = new PictureBox();
        pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
        pictureBox.Dock = DockStyle.Fill;

        this.Controls.Add(pictureBox);

        // 加载图像
        pictureBox.Image = Image.FromFile("path_to_your_image.jpg");
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new ImageDisplay());
    }
}

### 示例 2: 图像转换为灰度


using System;
using System.Drawing;
using System.Drawing.Imaging;

public static Bitmap ConvertToGrayscale(Bitmap original)
{
    // 创建一个和原图同样大小的灰度图像
    Bitmap grayScale = new Bitmap(original.Width, original.Height);

    for (int i = 0; i < original.Width; i++)
    {
        for (int j = 0; j < original.Height; j++)
        {
            // 获取原图像素
            Color originalColor = original.GetPixel(i, j);

            // 转换为灰度
            int gray = (int)((originalColor.R * 0.3) + (originalColor.G * 0.59) + (originalColor.B * 0.11));
            Color grayColor = Color.FromArgb(gray, gray, gray);

            // 设置灰度图像的像素
            grayScale.SetPixel(i, j, grayColor);
        }
    }

    return grayScale;
}

### 示例 3: 图像旋转


using System;
using System.Drawing;
using System.Drawing.Drawing2D;

public static Bitmap RotateImage(Bitmap bmp, float angle)
{
    // 创建一个空的Bitmap对象
    Bitmap bmpRotated = new Bitmap(bmp.Width, bmp.Height);
    bmpRotated.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);

    // 创建一个Graphics对象
    Graphics g = Graphics.FromImage(bmpRotated);

    // 设置旋转中心为图像中心
    g.TranslateTransform((float)bmp.Width / 2, (float)bmp.Height / 2);
    g.RotateTransform(angle);
    g.TranslateTransform(-(float)bmp.Width / 2, -(float)bmp.Height / 2);

    // 绘制原图到新的位置
    g.DrawImage(bmp, new Point(0, 0));

    g.Dispose();
    return bmpRotated;
}

注意:

- 这些示例仅展示了如何在C#中使用System.Drawing库进行基本的图像处理操作。

- 在实际应用中,你可能需要处理更复杂的图像处理任务,这时可以考虑使用OpenCV等更强大的库。

- 对于图像旋转示例,如果旋转角度不是90度、180度或270度的倍数,那么旋转后的图像可能会超出原始图像的尺寸。为了完整显示旋转后的图像,你可能需要创建一个足够大的Bitmap对象来容纳它。