验证码识别-验证码的特征码

1、下载远程图片
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        }

图片分割
public Bitmap[] GetSplitPicsByBlankCol(int RowNum, int dgGrayValue)
        
{
            
if (RowNum == 0)
                
return null;
            
int singW = bmpobj.Width / RowNum;
            Bitmap[] PicArray 
= new Bitmap[RowNum];

            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);

                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;
        }


能不能获得准确获得验证码还是要灰度转换的时候灰度值取得适中,能够准确分割就能取得正确的特征码。对于一般的图片验证码识别就非常简单了。
posted @ 2007-12-16 16:34  拒绝潜水的鱼  阅读(2971)  评论(3编辑  收藏  举报