小弟對幾個數字跟字母做了路徑判斷
主要是判別終點,跟四方向點(以自己為中心其他八方向中有四個都為黑色)
,以及三方向點 但是好像除了終點的判斷正確,其他都出現錯誤...
以下是我的結果
到底四方向跟三方向的部分是哪裡出錯呢?
小弟附上了程式碼,請各位大大幫幫忙解惑
感謝~
int p1[1000][1000];
void p1Pixel(Graphics::TBitmap *pBmp)
{ Byte *ptr;
for (int i=0;iHeight;i++ )
{
ptr=(Byte*)pBmp->ScanLine[i];
for (int j=0;jWidth; j++ )
{
p1[i][j]=ptr[j*3];
}
} } //判斷終點的規則是 : 以自己這個黑點為中心, 八個方向內只有一個黑點
int endp(Graphics::TBitmap *epBmp)
{
int endpoint=0; for(int i=1;iHeight-1;i++ )
{
for (int j=1;jWidth-1; j++ )
{
if(epBmp->Canvas->Pixels[j][i]==clBlack)
{
int p[10]={0};
p[1]=p1[i-1][j-1];
p[2]=p1[i][j-1];
p[3]=p1[i+1][j-1];
p[4]=p1[i-1][j];
p[5]=p1[i][j];
p[6]=p1[i+1][j];
p[7]=p1[i-1][j+1];
p[8]=p1[i][j+1];
p[9]=p1[i+1][j+1]; int bp=0; for(int pi=1;pi<10;pi++)
{
if((p[pi]==0) && (pi!=5))
bp++;
} if(bp==1)
endpoint++;
} }
} return(endpoint); } //判斷三方向點的規則是 : 以自己這個黑點為中心,八方向內出現三個黑點即可
int threndp(Graphics::TBitmap *threpBmp)
{
int threndpoint=0; for(int i=1;iHeight-1;i++ )
{
for (int j=1;jWidth-1; j++ )
{
if(threpBmp->Canvas->Pixels[j][i]==clBlack)
{
int p[10]={0};
p[1]=p1[i-1][j-1];
p[2]=p1[i][j-1];
p[3]=p1[i+1][j-1];
p[4]=p1[i-1][j];
p[5]=p1[i][j];
p[6]=p1[i+1][j];
p[7]=p1[i-1][j+1];
p[8]=p1[i][j+1];
p[9]=p1[i+1][j+1]; int bp=0; for(int pi=1;pi<10;pi++)
{
if((p[pi]==0) && (pi!=5))
bp++;
} if(bp==3)
threndpoint++; }
}
} return(threndpoint); } //判斷四方向點的規則是 : 以自己這個黑點為中心,八方向內出現四個黑點即可
int fouendp(Graphics::TBitmap *fouepBmp)
{
int fouendpoint=0; for(int i=1;iHeight-1;i++ )
{
for (int j=1;jWidth-1; j++ )
{
if(fouepBmp->Canvas->Pixels[j][i]==clBlack)
{
int p[10]={0};
p[1]=p1[i-1][j-1];
p[2]=p1[i][j-1];
p[3]=p1[i+1][j-1];
p[4]=p1[i-1][j];
p[5]=p1[i][j];
p[6]=p1[i+1][j];
p[7]=p1[i-1][j+1];
p[8]=p1[i][j+1];
p[9]=p1[i+1][j+1]; int bp=0; for(int pi=1;pi<10;pi++)
{
if((p[pi]==0) && (pi!=5))
bp++;
} if(bp==4)
fouendpoint++; }
}
} return(fouendpoint); } //下面就是啟動判斷各種點的按鈕,處理的圖形都是二值化且細化過的圖檔
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
//下面這個只是小弟在表單上的配置
TImage *img[6];
img[0]=Form1->Image3;
img[1]=Form1->Image4;
img[2]=Form1->Image5;
img[3]=Form1->Image6;
img[4]=Form1->Image7;
img[5]=Form1->Image8; TEdit *edt[6];
edt[0]=Form1->Edit16;
edt[1]=Form1->Edit19;
edt[2]=Form1->Edit22;
edt[3]=Form1->Edit25;
edt[4]=Form1->Edit28;
edt[5]=Form1->Edit31; TEdit *thredt[6];
thredt[0]=Form1->Edit17;
thredt[1]=Form1->Edit20;
thredt[2]=Form1->Edit23;
thredt[3]=Form1->Edit26;
thredt[4]=Form1->Edit29;
thredt[5]=Form1->Edit32; TEdit *fouedt[6];
fouedt[0]=Form1->Edit18;
fouedt[1]=Form1->Edit21;
fouedt[2]=Form1->Edit24;
fouedt[3]=Form1->Edit27;
fouedt[4]=Form1->Edit30;
fouedt[5]=Form1->Edit33; //我一次測六張細化路徑
for(int t=0;t<6;t++)
{
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(img[t]->Picture->Bitmap);
p1Pixel(Bmp); int ep=endp(Bmp);
int threp=threndp(Bmp);
int fouep=fouendp(Bmp); edt[t]->Text=(IntToStr)(ep);
thredt[t]->Text=(IntToStr)(threp);
fouedt[t]->Text=(IntToStr)(fouep); delete Bmp;
} }