繁体   English   中英

图像像素读取并与c#中的预定义像素进行比较

[英]Image pixel Reading and comparison with predefine pixel in c#

我想用c#写一段代码。 我想读取图像的像素。
我想找出这些颜色的百分比......任何帮助将不胜感激
这是我的代码:

myimage = new Bitmap(image Path);
pictureBox1.Image = myimage;
ht = myimage.Height;
wid = myimage.Width;
sum=ht*wid;

for (int i = 0; i < ht; ++i)
{
    for (int j = 0; j < wid; ++j)
    {
        pixel = myimage.GetPixel(j,i);

        //pixelColorStringValue = pixel.R.ToString("D3") + " " + pixel.G.ToString("D3") + " " + pixel.B.ToString("D3");
        Arrr = pixel.R;
        Aggg = pixel.G;
        Abbb = pixel.B;
        pixelColorStringValue = Arrr + " " + Aggg + " " + Abbb.ToString();

        switch (pixelColorStringValue)
        {
            case "255 255 255":
            {
                white = white + 1;
                break;
            }
            case "000 000 000":
            {
                // black pixel
                black = black + 1;
                break;
            }
        }
    }
}

wprs=(white / sum) * 100;    `
bprs=(black / sum) * 100;
blackres.Text = wprs.ToString();
whiteres.Text = bprs.ToString();

对于小图像,您的代码并非完全错误。

然而,需要一些改进,尤其是比较是非常无效的。

如果你只想计算黑白像素,你可以使用这个:

for (int i = 0; i < ht; ++i)
{
    for (int j = 0; j < wid; ++j)
    {
        Color pixel = myimage.GetPixel(j,i);
        if (pixel == Color.FromArgb(0, 0, 0)) black++;
        else if (pixel == Color.FromArgb(255, 255, 255)) white++;
    }
}

Console.WriteLine(black + " black  and " + white + " white pixels of of " + sum);

如果要计算图像中的所有颜色,可以使用此代码创建直方图:

Dictionary<Color, long> colorCount = new Dictionary<Color, long>();

for (int i = 0; i < ht; ++i)
{
    for (int j = 0; j < wid; ++j)
    {
        Color pixel = myimage.GetPixel(j, i);
        if (colorCount.ContainsKey(pixel)) colorCount[pixel]++;
        else colorCount.Add(pixel, 1);
    }
}

foreach (Color c in colorCount.Keys)
    Console.WriteLine( c.ToString() + " occurs " + colorCount[c] + " times.");

请注意,对于具有多种颜色的图像,它会创建多行输出 ;-)

另请注意,对于较大的图像,或者如果您需要经常运行此类分析,则不应使用GetPixel而应使用Lockbits ,这会快很多(> 10 倍)。 有关示例,请参见此处 Lockbits示例中的颜色位于data数组的字节中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM