验证码识别-验证码的特征码
1、下载远程图片
2、灰度转换
3、分割图片
4、按灰度得到分割图片的特征码
![](/images/cnblogs_com/slave2/Image00000.JPG)
(改图取的验证码特征码不是很准确:)呵呵)
有颜色的是原网站取得的图片
灰色的是灰度转换后的图片
下面是分割后的图片
下面列表框是特征码
灰度转换 是博客园里元宝的代码
图片分割
public Bitmap[] GetSplitPicsByBlankCol(int RowNum, int dgGrayValue)
{
if (RowNum == 0)
return null;
int singW = bmpobj.Width / RowNum;
Bitmap[] PicArray = new Bitmap[RowNum];
![](/Images/OutliningIndicators/InBlock.gif)
Rectangle cloneRect;
int MinCol = 0,OldCol=0;
int Points,MinPoints;
for (int j = 0; j < RowNum-1; j++)
{
MinPoints=bmpobj.Height;
for (int k = j * singW; k < (j + 1) * singW + singW/2; k++) //寻找最小点数列
{
Points = 0;
for (int i = 0; i < bmpobj.Height; i++)
{
if (bmpobj.GetPixel(k, i).R < dgGrayValue) //计数
Points++;
}
if (Points < MinPoints)
{
if (k - j * singW > singW / 2) //字符后半部
{
MinPoints = Points;
MinCol = k;
}
}
}
if (MinCol - OldCol + 1 <= singW / 2) //宽度不足一半
MinCol = (j + 1) * singW;
//提取小块图
if (MinPoints > 0) //有交叉点
cloneRect = new Rectangle(OldCol, 0, MinCol - OldCol+1, bmpobj.Height);
else
cloneRect = new Rectangle(OldCol, 0, MinCol-OldCol, bmpobj.Height);
![](/Images/OutliningIndicators/InBlock.gif)
OldCol=MinCol;
PicArray[j] = bmpobj.Clone(cloneRect, bmpobj.PixelFormat);//复制小块图
}
cloneRect = new Rectangle(OldCol, 0, bmpobj.Width - OldCol, bmpobj.Height);
PicArray[RowNum-1] = bmpobj.Clone(cloneRect, bmpobj.PixelFormat);//最后一个
return PicArray;
}
能不能获得准确获得验证码还是要灰度转换的时候灰度值取得适中,能够准确分割就能取得正确的特征码。对于一般的图片验证码识别就非常简单了。
2、灰度转换
3、分割图片
4、按灰度得到分割图片的特征码
(改图取的验证码特征码不是很准确:)呵呵)
有颜色的是原网站取得的图片
灰色的是灰度转换后的图片
下面是分割后的图片
下面列表框是特征码
灰度转换 是博客园里元宝的代码
1
/// <summary>
2
/// 灰度转换,逐点方式
3
/// </summary>
4
public void GrayByPixels()
5
{
6
for (int i = 0; i < bmpobj.Height; i++)
7
{
8
for (int j = 0; j < bmpobj.Width; j++)
9
{
10
int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i));
11
bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));
12
}
13
}
14
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
图片分割
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
能不能获得准确获得验证码还是要灰度转换的时候灰度值取得适中,能够准确分割就能取得正确的特征码。对于一般的图片验证码识别就非常简单了。
作者:拒绝潜水的鱼
出处:http://slave2.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://slave2.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。