我正在使用this article来解决验证码问题。它的工作原理是使用AForge从图像中删除背景,然后将Tesseract OCR应用于生成的清洁图像。
问题是,它目前依赖于黑色字母,并且由于每个验证码具有不同的文本颜色,我需要将颜色传递给图像清洁器,或者将字母的颜色更改为黑色。要做任何一个,我需要知道字母的现有颜色是什么。
我如何识别字母的颜色?
答案 0 :(得分:3)
使用@Robert Harvey的answer♦我使用LockBits
和scrollView'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;
}