如何框出相連元件 |
尚未結案
|
lincher
一般會員 發表:10 回覆:2 積分:2 註冊:2005-09-14 發送簡訊給我 |
各位前輩好,這邊有一個問題要請教大家 我參考前輩們的相連元件程式碼找出N個元件,那請問我要如何把所找出的元件用紅色正方型框起來呢? 如圖示我用手動把元件框起來 這是我參考前輩們的程式碼 -------------------//副程式//------------------------------------- void __fastcall TForm5::ComConnect(Graphics::TBitmap* BMP,int x,int y)
{ BMP->Canvas->Pixels[x][y]=clBlack;
Image4->Canvas->Pixels[x][y]=clYellow;
if(BMP->Canvas->Pixels[x+1][y]==clWhite)
ComConnect(BMP,x+1,y); if(BMP->Canvas->Pixels[x+1][y+1]==clWhite)
ComConnect(BMP,x+1,y+1); if(BMP->Canvas->Pixels[x][y+1]==clWhite)
ComConnect(BMP,x,y+1); if(BMP->Canvas->Pixels[x-1][y+1]==clWhite)
ComConnect(BMP,x-1,y+1); if(BMP->Canvas->Pixels[x-1][y]==clWhite)
ComConnect(BMP,x-1,y); if(BMP->Canvas->Pixels[x-1][y-1]==clWhite)
ComConnect(BMP,x-1,y-1); if(BMP->Canvas->Pixels[x][y-1]==clWhite)
ComConnect(BMP,x,y-1); if(BMP->Canvas->Pixels[x+1][y-1]==clWhite)
ComConnect(BMP,x,y-1); } //--------------------------------------------------------------------------- ----------------------------//主程式//------------------------------- void __fastcall TForm5::detection1Click(TObject *Sender)
{ int num=0;
int *A= new int[num];
ZeroMemory(A,sizeof(int)*num);
//動態宣告陣列
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Byte *ptr;
Bmp->Assign(Image4->Picture->Bitmap );
for(int y = 0; y < Bmp->Height; y++)
{
ptr = (Byte *) Bmp->ScanLine[y];
for(int x = 0; x < Bmp->Width; x++)
{
if(ptr[x*3]==255)
{
ComConnect(Bmp, x, y);
num++;
}
}
}
ShowMessage("物件個數為"+IntToStr(num)+"個");
delete Bmp;
delete [] A; }
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
你瞭解ComConnect的用法嗎?
他的用途在找目前亮點周圍的下一個亮點,不斷地遞迴找下去,直到相連的亮點都找出來為止
因此,在detection1Click函式內,每呼叫一次ComConnect函式,就會找出一個完整的區塊
那你的需求是:希望在找尋這個區塊的過程中,同時知道上下左右的座標
那解決方案就很簡單了,只要在ComConnect被呼叫時,同時紀錄過程中x,y軸上最大值跟最小值就行了,ex:
int maxx, minx, maxy, miny; //紀錄右、左、下、上座標的變數 ComConnect(...) { maxx=max(x, maxx); minx=min(x, minx); ... } detection1Click(...) { ... for (y...) for (x...) if (white point) { maxx=0; minx=image_width; maxy=0; miny=image_height; ComConnect(x,y...); draw_on_image(minx, miny, maxx, maxy); } ... } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |