system.net.webclient _client =new system.net.webclient();
byte _imagebytes =_client.downloaddata("");
memorystream _memory = new memorystream(_imagebytes);
bitmap _oldbitmap = (bitmap)image.fromstream(_memory);
picturebox1.image = _oldbitmap; this.text = getcodetext(_oldbitmap);
/// /// 獲取驗證碼
///
/// 圖形
/// 數值
public static string getcodetext(bitmap p_bitmap)
int _value1 = array.indexof(_textbytes, getimagetext(_bitmap[0]));
int _value2 = array.indexof(_textbytes, getimagetext(_bitmap[1]));
int _value3 = array.indexof(_textbytes, getimagetext(_bitmap[2]));
int _value4 = array.indexof(_textbytes, getimagetext(_bitmap[3]));
string _value = _value1 == -1 ? "?" : _value1.tostring();
_value += _value2 == -1 ? "?" : _value2.tostring();
_value += _value3 == -1 ? "?" : _value3.tostring();
_value += _value4 == -1 ? "?" : _value4.tostring();
return _value;
}private static string _textbytes = new string
; /// /// 獲取二值化資料
///
/// 圖形
/// 二值化資料
public static string getimagetext(bitmap p_bitmap)
else
_index++;}}
p_bitmap.unlockbits(_data);
int _byteindex =_bitarray.count / 8;
if (_bitarray.count % 8 != 0) _byteindex++;
byte _temp =new byte[_byteindex];
_bitarray.copyto(_temp, 0);
return bitconverter.tostring(_temp).replace("-", "");
}
數字
using system;
using system.collections.generic;
using system.text;
using system.drawing;
namespace crazycoder.common.decode
public ganjiimagedecode(string path) : base(path)
//特徵碼陣列
string codearray = new string ;
public bitmap getpic() }
return pics;
} public string getcodestring()
else }
} }
return numstr;
} }
}
其他方式
using system;
using system.collections.generic;
using system.text;
using system.collections;
using system.drawing;
using system.drawing.imaging;
using system.runtime.interopservices;
namespace ballotaiying2
/// /// 根據rgb,計算灰度值
///
/// color值
/// 灰度值,整型
private int getgraynumcolor(system.drawing.color posclr)
/// /// 灰度轉換,逐點方式
///
public void graybypixels()}}
/// /// 去圖形邊框
///
///
public void clearpicborder(int borderwidth)}}
/// /// 灰度轉換,逐行方式
///
public void graybyline()
bmpobj.unlockbits(bmpdata);
}/// /// 得到有效圖形並調整為可平均分割的大小
///
/// 灰度背景分界值
/// 有效字元數
///
public void getpicvalidbyvalue(int dggrayvalue, int charscount);};
};// 確保能整除
int span = charscount - (posx2 - posx1 + 1) % charscount; //可整除的差額數
if (span < charscount)
//複製新圖
rectangle clonerect = new rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
bmpobj = bmpobj.clone(clonerect, bmpobj.pixelformat);
}/// /// 得到有效圖形,圖形為類變數
///
/// 灰度背景分界值
/// 有效字元數
///
public void getpicvalidbyvalue(int dggrayvalue);};
};//複製新圖
rectangle clonerect = new rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
bmpobj = bmpobj.clone(clonerect, bmpobj.pixelformat);
}/// /// 得到有效圖形,圖形由外面傳入
///
/// 灰度背景分界值
/// 有效字元數
///
public bitmap getpicvalidbyvalue(bitmap singlepic, int dggrayvalue);};
};//複製新圖
rectangle clonerect = new rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
return singlepic.clone(clonerect, singlepic.pixelformat);
}/// /// 平均分割
///
/// 水平上分割數
/// 垂直上分割數
/// 分割好的陣列
public bitmap getsplitpics(int rownum,int colnum)
}return picarray;
}/// /// 返回灰度的點陣描述字串,1表示灰點,0表示背景
///
/// 灰度圖
/// 背前景灰色界限
///
public string getsinglebmpcode(bitmap singlepic, int dggrayvalue)
return code;}}
}
驗證碼識別(C )
1 如何設前景 背景的分界值 uncodebase類中有乙個getpicvalidbyvalue int dggrayvalue 函式,可以得到前景的有效區域,常有人問我 前景 背景的分界值dggrayvalue是如何確定的 常用的是灰度128 這個值的獲取是有數學演算法,叫最大類間方差法,即影象的...
C 識別驗證碼
今天跟大家一起分享切分和識別,在這裡就要有個分支,切分有兩個情況,乙個是分開的字元的切分和識別,另乙個是連在一起的字元的切分和識別。今天先共享分開字元的識別,仍然是原始碼共享。首先要說一下原理,在網上的很多 在切分的時候,很的情況會導致切分失敗,比如字元的左右位置不固定。所以在切分的時候,我採用的方...
驗證碼 簡單驗證碼識別
這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 這裡的驗證碼是內容非常簡單的,結構非常清晰的 興之所至之所以說簡單,我覺得是這樣的 抽了五張驗證碼扔進ps,50 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...