如何在C#中使用EMGU CV找到图片中出现的最大颜色?

时间:2016-03-18 05:48:27

标签: c# opencv emgucv

我有一个“windows控件”的图像让我们说一个文本框,我希望通过像素颜色比较找到该图片中出现的最大颜色,从而获得文本框中写入的文本的背景颜色。 我在谷歌搜索,我发现每个人都在谈论直方图,并且还给出了一些代码来找出图像的直方图,但没有人在找到直方图后描述过程。

我在某些网站上找到的代码就像

        // Create a grayscale image
        Image<Gray, Byte> img = new Image<Gray, byte>(bmp);
        // Fill image with random values
        img.SetRandUniform(new MCvScalar(), new MCvScalar(255));
        // Create and initialize histogram
        DenseHistogram hist = new DenseHistogram(256, new RangeF(0.0f, 255.0f));
        // Histogram Computing
        hist.Calculate<Byte>(new Image<Gray, byte>[] { img }, true, null);

目前我使用的代码从图像中获取一个线段并找到最大颜色,但这不是正确的方法。 目前使用的代码如下

        Image<Bgr, byte> image = new Image<Bgr, byte>(temp);
        int height = temp.Height / 2;
        Dictionary<Bgr, int> colors = new Dictionary<Bgr, int>();
        for (int i = 0; i < (image.Width); i++)
        {
            Bgr pixel = new Bgr();
            pixel = image[height, i];
            if (colors.ContainsKey(pixel))
                colors[pixel] += 1;
            else
                colors.Add(pixel, 1);                
        }
        Bgr result = colors.FirstOrDefault(x => x.Value == colors.Values.Max()).Key;
如果有人知道如何获得它,请帮助我。将此图像作为输入==&gt; White Text Box

2 个答案:

答案 0 :(得分:1)

Emgu.CV的DenseHistogram公开了方法MinMax(),它找到了直方图的最大和最小区间。

所以在计算你的直方图后,就像你的第一个代码片段一样:

// Create a grayscale image
Image<Gray, Byte> img = new Image<Gray, byte>(bmp);
// Fill image with random values
img.SetRandUniform(new MCvScalar(), new MCvScalar(255));
// Create and initialize histogram
DenseHistogram hist = new DenseHistogram(256, new RangeF(0.0f, 255.0f));
// Histogram Computing
hist.Calculate<Byte>(new Image<Gray, byte>[] { img }, true, null);

...使用此方法找到直方图的峰值:

float minValue, maxValue;
Point[] minLocation;
Point[] maxLocation;
hist.MinMax(out minValue, out maxValue, out minLocation, out maxLocation);

// This is the value you are looking for (the bin representing the highest peak in your
// histogram is the also the main color of your image).
var mainColor = maxLocation[0].Y;

答案 1 :(得分:0)

我在stackoverflow中找到了一个代码片段来完成我的工作。 代码就像这样

{{1}}