c# 驗證碼的識別主要分為預處理、分割、識別三個步驟
首先我從網站上下載驗證碼
處理結果如下:

1.圖片預處理,即二值化圖片
*就是將圖像上的像素點的灰度值設置為0或255。
原理如下:

代碼如下:
#region 二值化圖片
///
/// 二值化圖片
/// 就是將圖像上的像素點的灰度值設置為0或255
///
/// 處理後的驗證碼
public Bitmap BinaryZaTion()
{
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
__c = img.GetPixel(x, y);
//灰度值
int __tc = (__c.R + __c.G + __c.B) / 3;
//大於阙值 黑色
if (__tc > t)
{
img.SetPixel(x, y, Color.FromArgb(__c.A, b, b, b));
//黑色點個數自加
__blackNum++;
}
//大於阙值 白色
else
{
img.SetPixel(x, y, Color.FromArgb(__c.A, w, w, w));
}
}
}
return img;
}
#endregion代碼如下:
#region 是否需要反色
///
/// 是否需要反色
///
/// 是否需要反色
public bool IsNeedInverseColor()
{
if ((__blackNum * 1.0 / (img.Width * img.Height)) > 0.5)
{
return true;
}
else
{
return false;
}
}
#endregion
#region 反色
///
/// 反色
///
/// 處理後的驗證碼
public Bitmap InverseColor()
{
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
__c = img.GetPixel(x, y);
img.SetPixel(x, y, Color.FromArgb(__c.A, w - __c.R, w - __c.G, w - __c.B));
}
}
return img;
}
#endregion
2.圖片分割<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+ztK1xNf2t6jKx8/Iw7/Su8r60NDF0LbPyse38crHtL+w18mr0NCjrLK7yse1xLuwvMfCvLWxx7B41/ix6qOsyLu688O70tS64dDQxdC2z8rHt/G0v7DXyavQ0KOs1eLR+b7NxNy1xLW9w7/Su7j2yv3X1rXEx/jT8qOsyLu6872rx/jT8ruts/bAtKGjPC9wPgo8cD60+sLryOfPwqO6PC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;"> #region 分割圖片
/// 識別呢就是提取出圖片的特征 我的做法是將圖片數字區域逐一分成4*4的區域,計算出各個區域的黑色點所占的百分比,然後將計算出來的結果和以前計算的特征進行比較,求出歐氏距離
d = sqrt( (x1-x2)^2+(y1-y2)^2 )最小的一個作為結果。 部分代碼如下: 效果如下: 本代碼只做研究學習之用。 新手上路,有任何建議、意見聯系 pigkeli@qq.com 。

3.識別#region 黑色像素比列
///
