全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2336
推到 Plurk!
推到 Facebook!

字母與數字辨識如何利用迴圈提高辨識

 
man0821
一般會員


發表:6
回覆:5
積分:2
註冊:2004-03-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-21 10:32:33 IP:192.192.xxx.xxx 未訂閱
下圖為我程式畫面 ===================================================================== 下為主要的code int many=0; struct alphabet { int td; int w; int h; char c; }; alphabet ab[52]={{170, 28, 27, 'A'}, {226, 22, 26, 'B'}, {232, 16, 32, 'C'}, {219, 25, 26, 'D'}, {237, 16, 28, 'E'}, {124, 18, 26, 'F'}, {194, 25, 27, 'G'}, {214, 24, 26, 'H'}, { 91, 8, 26, 'I'}, { 94, 11, 26, 'J'}, {210, 26, 26, 'K'}, {124, 15, 28, 'L'}, {258, 31, 26, 'M'}, {187, 24, 26, 'N'}, {216, 26, 27, 'O'}, {160, 18, 26, 'P'}, {245, 26, 34, 'Q'}, {219, 24, 26, 'R'}, {162, 17, 27, 'S'}, {141, 22, 26, 'T'}, {139, 23, 26, 'U'}, {199, 15, 29, 'V'}, {264, 33, 26, 'W'}, {190, 28, 26, 'X'}, {150, 24, 26, 'Y'}, {162, 23, 26, 'Z'}, {80, 6, 27, '1'}, {160, 19, 28, '2'}, {100, 15, 18, '3'}, {174, 12, 27, '4'}, {114, 15, 18, '5'}, {215, 14, 28, '6'}, {170, 18, 26, '7'}, {188, 14, 27, '8'}, { 216, 15, 28, '9'}, { 208, 14, 28, '0'}, {4, 2, 2, '-'}, { 115, 9, 27, '1'}, {197, 14, 29, '4'}, {15, 5, 3, '-'}, {125, 17, 18, 'o'}, {163, 18, 26, 'p'}, {159, 16, 26, 'q'}, { 77, 12, 18, 'r'}, { 95, 12, 18, 's'}, { 80, 11, 23, 't'}, {126, 18, 18, 'u'}, { 90, 19, 18, 'v'}, {159, 28, 18, 'w'}, {109, 18, 18, 'x'}, {108, 19, 26, 'y'}, {103, 16, 18, 'z'}}; alphabet analyze(TCanvas *pix, int sx, int sy, int height, int width) { alphabet ab; int td=0, tmpx1=0, tmpx2=0, tmpy1=0, tmpy2=0; for(int y=sy; yPixels[x][y]==0) { if(td==0) { tmpx1=x; tmpx2=x; tmpy1=y; tmpy2=y; }else { if(xtmpx2) tmpx2=x; tmpy2=y; } td++; } } } ab.td=td; ab.w=tmpx2-tmpx1+1; ab.h=tmpy2-tmpy1+1; return ab; } TForm1 *Form1; ===================================================================== 辨識button的code void __fastcall TForm1::btnOcrClick(TObject *Sender) { alphabet ch; String str=""; int * shadow=new int[Image2->Picture->Width]; int i, j, x, y, xd, td, tmpx1, tmpx2, tmpy1, tmpy2; for(i=0; iPicture->Width; i++) shadow[i]=0; xd=0; td=0; tmpx1=0; tmpx2=0; tmpy1=0; tmpy2=0; for(y=0; yPicture->Height; y++) { for(x=0; xPicture->Width; x++) if(Image2->Picture->Bitmap->Canvas->Pixels[x][y]==0) { if(td==0) { tmpx1=x; tmpx2=x; tmpy1=y; tmpy2=y; }else { if(xtmpx2) tmpx2=x; tmpy2=y; } td++; shadow[x]++; xd++; } if(xd==0&&td>0) { for(i=tmpx1, td=0; iPicture->Bitmap->Canvas, j, tmpy1, tmpy2+1, td+j); for(xd=0; xd<52; xd++) if(ch.td==ab[xd].td&&ch.w==ab[xd].w&&ch.h==ab[xd].h) str+=ab[xd].c; } td=0; } memo->Lines->Append(str); str=""; for(i=0; iPicture->Width; i++) shadow[i]=0; xd=0; td=0; tmpx1=0; tmpx2=0; tmpy1=0; tmpy2=0; }else xd=0; } delete shadow; } ===================================================================== 呃....我比較笨,,,怕大家不知道我想討論的是什麼,,,所以把圖與code都貼出來,,大家可以討論看看,,, 我寫的方式: 1.將圖轉二值化,,圖大小有一定規定 2.計算二值話後的黑點數,,與每個字母或數字會大的高與寬個數 3.在帶回去最上面所貼的code後會得知是哪個字母或數字 現在有個問題是因為拍照的圖案不可能腳度或方向都一定,,,導至同一張車牌 拍2次,,,2次所算的黑點多少會有誤差,,,所以我想用迴圈方式 譬如說,,,如果以""A""來說 我們算出黑點數範圍為80~100 寬黑點數範圍10~15 長黑點數範圍20~25 就當做是""A"" 如果不是就往下一個去比對... 比到符合這範圍的,,,,就是答案 但程式我不知道要如何去改了>"< 有沒有高手可以討論看看
系統時間:2024-05-21 0:25:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!