作者cygnus122 ()
看板C_and_CPP
标题[问题] 用BCB写判断Image上物体最大边界且框出(四方形)
时间Tue Oct 6 12:29:54 2009
请问各位
小弟我想用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
1F:推 snowlike:sum1~4都等於0才会跳出while你的sum什麽时候才都等於0? 10/06 12:47