全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:948
推到 Plurk!
推到 Facebook!

如何框出相連元件

尚未結案
lincher
一般會員


發表:10
回覆:2
積分:2
註冊:2005-09-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-15 15:33:19 IP:163.23.xxx.xxx 未訂閱
各位前輩好,這邊有一個問題要請教大家    我參考前輩們的相連元件程式碼找出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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-15 20:55:56 IP:221.169.xxx.xxx 未訂閱
你瞭解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);
    }
...
}
系統時間:2024-05-12 4:03:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!