如何识别这些图像中字母的颜色?

时间:2017-01-19 00:06:43

标签: c# captcha tesseract aforge

我正在使用this article来解决验证码问题。它的工作原理是使用AForge从图像中删除背景,然后将Tesseract OCR应用于生成的清洁图像。

问题是,它目前依赖于黑色字母,并且由于每个验证码具有不同的文本颜色,我需要将颜色传递给图像清洁器,或者将字母的颜色更改为黑色。要做任何一个,我需要知道字母的现有颜色是什么。

我如何识别字母的颜色?

Image with letters in it

Image with letters in it

2 个答案:

答案 0 :(得分:3)

使用@Robert Harvey的answer♦我使用LockBitsscrollView's方法开发了相同的代码,以提高速度。您必须使用"允许不安全的代码"进行编译。国旗。请注意,从图像返回的像素的顺序是unsafe而不是bgr格式,我使用rgb格式锁定位图,以强制它使用每种颜色3个字节。

Format24bppRgb

答案 1 :(得分:2)

这个特定问题的解决方案变得相对简单。我所要做的就是将图像左侧中间的边缘像素的颜色,向右扫描像素直到颜色改变,这就是第一个字母的颜色。

public Color GetTextColor(Bitmap bitmap)
{
    var y = bitmap.Height/2;
    var startingColor = bitmap.GetPixel(0, y);

    for (int x = 1; x < bitmap.Width; x++)
    {
        var thisColor = bitmap.GetPixel(x, y);
        if (thisColor != startingColor)
            return thisColor;
    }
    return null;
}