[問題] 用BCB寫判斷Image上物體最大邊界且框出(四方形)
請問各位
小弟我想用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
10/06 12:47, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章