C#辨認出圖片裡的數字和字母。本站提示廣大學習愛好者:(C#辨認出圖片裡的數字和字母)文章只能為提供參考,不一定能成為您想要的結果。以下是C#辨認出圖片裡的數字和字母正文
一個圖片辨認小對象,本來重要是辨認之前公司的軟件注冊碼截圖裡的數字和字母(每主要一個一個框復制出來粘貼到注冊器裡,很費事!),由於注冊碼湧現的字母和數字根本就那幾個,所以辨認庫的規模設定的比擬少。
道理和算法在代碼中做了具體解釋,功效存在很年夜的局限性,但我的設法主意是把這個思緒和完成的方法同享出來。
源碼下載地址:
http://git.oschina.net/bobo2cj/iamge2text
/* * 開辟思緒:圖片灰度處置,二進制,然後和圖片中的字二進制庫准確比較 * * 獲得字庫:經由過程上面代碼中generateLicense(Bitmap singlepic)辦法取得,詳細操作: * 從圖片中截圖出(摳出)一個字符,然後處置獲得二維的二進制矩陣,好比上面的字符1對應的二維矩陣 * 00000 * 00100 * 11100 * 00100 * 00100 * 00100 * 00100 * 00100 * 00100 * 11111 * 00000 * 00000 * * 留意:【雷同字符,好比1,分歧字體,字號,分歧縮縮小小的圖片,取得到的二位矩陣中0、1分列和數目都是分歧的! * 故依照此辦法來寫出婚配一切字的話,那字庫就年夜了。。。】 * * */ /// <summary> /// 提掏出該圖片內的字符(將進過灰度處置的圖片轉化為0、1的二位數組) /// </summary> /// <param name="singlepic">圖片起源</param> public void generateLicense(Bitmap singlepic) { try { char[,] charArray = new char[singlepic.Height, singlepic.Width]; //界說個chai型的二維數組記載每一個像素上0/1的值,構成一個矩形 int imageWidth = 0; //記載圖片的像素寬度 int imageHeight = 0; //記載圖片的像素高度 int dgGrayValue = 128; //灰度值 Color piexl; //string code = ""; //存儲每一個像素的0/1 for (int posy = 0; posy < singlepic.Height; posy++) {//從上到下 string codeCache = ""; //存儲每行的像素的0/1 for (int posx = 0; posx < singlepic.Width; posx++) {//從左到右 piexl = singlepic.GetPixel(posx, posy); if (piexl.R < dgGrayValue) {// 假如該像素的色彩為黑色,值就為“1” codeCache = codeCache + "1"; } else {// 不然該像素的色彩為白色,值就為“0” codeCache = codeCache + "0"; } } char[] array = codeCache.ToCharArray(); //每行的0/1的值用數字保留,以便於停止輪回處置 //code += codeCache + "\n"; for (imageWidth = 0; imageWidth < array.Length; imageWidth++) charArray[imageHeight, imageWidth] = array[imageWidth]; //經由過程輪回將每行值轉存到二維數組中 imageHeight++; } //*********************以上代碼可用來獲得一個字的圖片二進制數組,即字庫***************************** //開端和字庫停止婚配(我的對象中只須要上面的幾個字符) findWord(charArray, char0, imageHeight, imageWidth, BinaryWidth0, BinaryHeight0, '0'); findWord(charArray, char1, imageHeight, imageWidth, BinaryWidth1, BinaryHeight1, '1'); findWord(charArray, char2, imageHeight, imageWidth, BinaryWidth2, BinaryHeight2, '2'); findWord(charArray, char3, imageHeight, imageWidth, BinaryWidth3, BinaryHeight3, '3'); findWord(charArray, char4, imageHeight, imageWidth, BinaryWidth4, BinaryHeight4, '4'); findWord(charArray, char5, imageHeight, imageWidth, BinaryWidth5, BinaryHeight5, '5'); findWord(charArray, char6, imageHeight, imageWidth, BinaryWidth6, BinaryHeight6, '6'); findWord(charArray, char7, imageHeight, imageWidth, BinaryWidth7, BinaryHeight7, '7'); findWord(charArray, char8, imageHeight, imageWidth, BinaryWidth8, BinaryHeight8, '8'); findWord(charArray, char9, imageHeight, imageWidth, BinaryWidth9, BinaryHeight9, '9'); findWord(charArray, charA, imageHeight, imageWidth, BinaryWidthA, BinaryHeightA, 'a'); findWord(charArray, charB, imageHeight, imageWidth, BinaryWidthB, BinaryHeightB, 'b'); findWord(charArray, charC, imageHeight, imageWidth, BinaryWidthC, BinaryHeightC, 'c'); findWord(charArray, charD, imageHeight, imageWidth, BinaryWidthD, BinaryHeightD, 'd'); findWord(charArray, charE, imageHeight, imageWidth, BinaryWidthE, BinaryHeightE, 'e'); findWord(charArray, charF, imageHeight, imageWidth, BinaryWidthF, BinaryHeightF, 'f'); findWord(charArray, charP, imageHeight, imageWidth, BinaryWidthP, BinaryHeightP, 'p'); findWord(charArray, charY, imageHeight, imageWidth, BinaryWidthY, BinaryHeightY, 'y'); //------------------------------------END--------------------------------------------- richTextBoxLicense.Text += identifySort(); //履行identifySort辦法,將我須要的格局在richTextBoxLicense文本框中顯示 richTextBoxLicense.SelectionStart = richTextBoxLicense.TextLength; //將光標移到最初面 } catch { } }
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。