C 驗證碼識別類1

2021-06-06 17:17:25 字數 4207 閱讀 4586

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 透明度,長這樣 只有數字為內容 每張圖的數字都在固定位置 沒有太大的干擾因素 數字字型,形態完...