gpt4 book ai didi

c# - C# 中图像过滤的高速性能

转载 作者:行者123 更新时间:2023-11-30 20:13:26 24 4
gpt4 key购买 nike

我有位图。我想对我的位图应用中值过滤器。但我不能使用 GetPixel() 和 SetPixel(),因为速度对我来说非常重要。我需要非常快速的方法来做到这一点。也许可以通过 Graphics.DrawImage(Image, Point[], Rectangle, GraphicsUnit, ImageAttributes) 来完成。

在中值滤波器之后,我想应用二值化滤波器(对于每个像素计算亮度:B=0.299*R+0.5876*G+0.114B,如果亮度小于阈值(阈值是我的任务的参数 [0... 255]) 那么结果图像中我的像素值为 1,否则 - 0) 二值化滤波器的速度对我来说也很重要

最佳答案

刚刚找到这个链接:A fast way to grayscale an image in .NET (C#)

/// <summary>
/// Grayscales a given image.
/// </summary>
/// <param name="image">
/// The image that is transformed to a grayscale image.
/// </param>
public static void GrayScaleImage(Bitmap image)
{
if (image == null)
throw new ArgumentNullException("image");

// lock the bitmap.
var data = image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite, image.PixelFormat);
try
{
unsafe
{
// get a pointer to the data.
byte* ptr = (byte*)data.Scan0;

// loop over all the data.
for (int i = 0; i < data.Height; i++)
{
for (int j = 0; j < data.Width; j++)
{
// calculate the gray value.
byte y = (byte)(
(0.299 * ptr[2]) +
(0.587 * ptr[1]) +
(0.114 * ptr[0]));

// set the gray value.
ptr[0] = ptr[1] = ptr[2] = y;

// increment the pointer.
ptr += 3;
}

// move on to the next line.
ptr += data.Stride - data.Width * 3;
}
}
}
finally
{
// unlock the bits when done or when
// an exception has been thrown.
image.UnlockBits(data);
}
}

编辑:查看更多信息:

  1. Using the LockBits method to access image data
  2. GrayScale and ColorMatrix

关于c# - C# 中图像过滤的高速性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1580130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com