确定位图中的像素是否是C#中的任何绿色阴影

时间:2017-03-10 14:14:27

标签: c# bitmap pixel

我目前有以下代码来查看位图的像素:

public struct Pixel
{
    public byte Blue;
    public byte Green;
    public byte Red;
    public byte Alpha;

    public Pixel(byte blue, byte green, byte red, byte alpha)
    {
        Blue = blue;
        Green = green;
        Red = red;
        Alpha = alpha;
    }
}

    public unsafe void Change(ref Bitmap inputBitmap)
    {
        Rectangle imageSize = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
        BitmapData imageData = inputBitmap.LockBits(imageSize, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

        for (int indexY = 0; indexY < imageData.Height; indexY++)
        {
            byte* imageDataBytes = (byte*)imageData.Scan0 + (indexY * imageData.Stride);

            for (int indexX = 0; indexX < imageData.Width; indexX++)
            {
                Pixel pixel = GetPixelColour(imageDataBytes, indexX);
            }
        }

        inputBitmap.UnlockBits(imageData);
    }

一旦读取了来自字节的像素,我希望能够确定像素是否是任何绿色阴影。我有一些问题要弄清楚数学应该是什么来确定特定阴影和绿色与被观察者之间的距离。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

纯绿色是0,255,0 - 你需要做的是取每个像素的R,G和B分量之间的差值并取平均值。所以说你的像素是100,200,50(这是一个非绿色的:https://www.colorcodehex.com/64c832/) - R,G和B差异为100,55,50,平均值为68(这三者的总和)差异除以3)。平均值越接近0,它就越接近参考颜色。

您需要做的是选择一个阈值&#39; - 离你的参考颜色有多远,并且仍被认为足够接近,然后低于该阈值的任何东西你都认为是绿色的,然后用它做你喜欢的任何事情。