[問題] 用BCB寫判斷Image上物體最大邊界且框出(四方形)

看板C_and_CPP (C/C++)作者時間16年前 (2009/10/06 12:29), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
請問各位 小弟我想用BCB寫找出在Image上物體的最大邊界 並且用紅色的框把它框出來 我是用EzCapCamera把影像抓進來處理 這種寫法可以框出在影像中多個移動物件 但在do while迴圈那邊似乎有個大問題 一開就當了 我用for替代測試結果是正確的 但這樣每次都會執行300次 效率不太好 想請教板上先進能否指點一下是哪裡有問題嘛 以下是部分程式碼 感謝各位 for(int y=1;y<Image1->Picture->Bitmap->Height-1;y++) { ptr2 = (Byte *)Image3->Picture->Bitmap->ScanLine[y]; ptr4 = (Byte *)Image3->Picture->Bitmap->ScanLine[y-1]; ptr5 = (Byte *)Image3->Picture->Bitmap->ScanLine[y+1]; for(int x=1;x<Image1->Picture->Bitmap->Width-1;x++) { if(ptr2[3*x]==255 && ptr4[3*x]==255 && ptr5[3*x]==255) { int sy, ey, sx, ex, sum1, sum2, sum3, sum4; sy = y - 1; ey = y + 1; sx = x - 1; ex = x + 1; //do for(int a=0; a<=300; a++)//就在這,我用for替代測試裡面程式碼是OK的 { ptr1 = (Byte *)Image3->Picture->Bitmap->ScanLine[sy]; ptr3 = (Byte *)Image3->Picture->Bitmap->ScanLine[ey]; sum1 = 0; for(int i=sx; i<=ex; i++) sum1 += ptr1[3*i]; sum2 = 0; for(int j=sx; j<=ex; j++) sum2 += ptr3[3*j]; sum3 = 0; for(int k=sy; k<=ey; k++) { ptr1 = (Byte *)Image3->Picture->Bitmap->ScanLine[k]; sum3 += ptr1[3*sx]; } sum4 = 0; for(int s=sy; s<=ey; s++) { ptr1 = (Byte *)Image3->Picture->Bitmap->ScanLine[s]; sum4 += ptr1[3*ex]; } if(sum1 !=0 && sy>1) sy --; if(sum2 !=0 && ey<Height-1) ey ++; if(sum3 !=0 && sx>1) sx --; if(sum4 !=0 && ex<Width-1) ex ++; }//while( !(sum1 == 0 && sum2 ==0 && sum3 == 0 && sum4 == 0) ); //while在這 for(int j=sy;j<=ey;j++) { ptr1 = (Byte *)Image3->Picture->Bitmap->ScanLine[j]; for(int i=sx; i<=ex; i++) { ptr1[3*i] = 0; ptr1[3*i+1] = 0; ptr1[3*i+2] = 0; } } Image3->Refresh(); if( (ex-sx) > 10 ) { Image2->Canvas->Pen->Color = clRed; Image2->Canvas->Brush->Style = bsClear; Image2->Canvas->Rectangle(sx, sy, ex, ey); } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.26.50.240

10/06 12:47, , 1F
sum1~4都等於0才會跳出while你的sum什麼時候才都等於0?
10/06 12:47, 1F
文章代碼(AID): #1AoiV3Uf (C_and_CPP)
文章代碼(AID): #1AoiV3Uf (C_and_CPP)