man0821
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:6 回覆:5 積分:2 註冊:2004-03-09
發送簡訊給我
|
下圖為我程式畫面
![](http://delphi.ktop.com.tw/loadfile.php?TOPICID=16753338&CC=374682)
=====================================================================
下為主要的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; y Pixels[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""
如果不是就往下一個去比對...
比到符合這範圍的,,,,就是答案
但程式我不知道要如何去改了>"<
有沒有高手可以討論看看
|