我也是个小白,也是再摸索中,如果有高手的话请一定要教教我哈。写这个文章也是为了不让自己忘记。
C# AspriseOCR 验证码识别(第一讲)http://blog.csdn.net/arv002/article/details/54020654
一、一般来说验证码的图片都是来源于网络,所以我们先从网络中获取图片。
public Image get_image(string url) { WebRequest webreq = WebRequest.Create(url); // url是网络图片的地址。。 WebResponse webres = webreq.GetResponse(); Stream stream = webres.GetResponseStream(); System.Drawing.Image image; image = System.Drawing.Image.FromStream(stream); stream.Close(); return image; }
二、本地图片获取就很简单了。
Image mm = Image.FromFile("D:\\4.png");
三、去除掉相关颜色(比如背景中有一些固定背景干扰点,这个颜色需要人为的去获取,因为每个人遇到的验证码可能都不一样)颜色都是按照RGB来计算的。
将图片的每个像素点都遍历一次,将遇到的颜色设置为白色即可,这个是一个方法,具体的使用还是需要根据个人情况来定。
Bitmap btp = new Bitmap(mm);
Color c = new Color();
int rr, gg, bb;
for (int i = 0; i < btp.Width; i++)
{
for (int j = 0; j < btp.Height; j++)
{
//取图片当前的像素点
c = btp.GetPixel(i, j);
rr = c.R; gg = c.G; bb = c.B;
//改变颜色
if (rr == 204 && gg == 255 && bb == 255)
{
//重新设置当前的像素点
btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
}
if (rr == 255 && gg == 213 && bb == 255)
{
//重新设置当前的像素点
btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
} if (rr == 204 && gg == 213 && bb == 255)
{
//重新设置当前的像素点
btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
}
if (rr == 255 && gg == 0 && bb == 0)
{
//重新设置当前的像素点
btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
}
if (rr == 153 && gg == 0 && bb == 51)
{
//重新设置当前的像素点
btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
}
if (rr == 0 && gg == 0 && bb == 0)
{
//重新设置当前的像素点
btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
}
}
}
3.灰度设置(我看到灰度的计算算法和我参考的代码不一样,为什么要这么设置有懂的话可以告诉我一下哈)
RGB转灰度值参考 http://blog.csdn.net/cool1949/article/details/6649429
Bitmap bmphd = btp; for (int i = 0; i < bmphd.Width; i++) { for (int j = 0; j < bmphd.Height; j++) { //取图片当前的像素点 var color = bmphd.GetPixel(i, j); var gray = (int)(color.R * 0.001 + color.G * 0.700 + color.B * 0.250); //重新设置当前的像素点 bmphd.SetPixel(i, j, Color.FromArgb(gray, gray, gray)); } }