【发布时间】:2016-03-30 15:35:54
【问题描述】:
我有一个“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;
【问题讨论】:
-
您的第二种方法在这里是正确的,只需遍历所有像素(在
image.Height上添加一个嵌套的 for 循环) -
你的图片是什么类型的?灰度还是彩色? RGB 还是别的什么?