如何判斷圖片上的封閉區域 |
缺席
|
jwu2010
一般會員 ![]() ![]() 發表:2 回覆:1 積分:0 註冊:2009-05-09 發送簡訊給我 |
![]() 如上圖 左邊是1個封閉區域,右邊是開放的 當我用SCANLINE去抓白點的座標,會全部抓。 但我只需要左邊封閉區域的座標,請問要如何判斷封閉區域? [code cpp] void __fastcall TForm1::btnCoordinatesClick(TObject *Sender) { Graphics::TBitmap *Bmp1; Byte *ptr = NULL; int x,y,z; Memo1->Lines->Clear(); Bmp1 = new Graphics::TBitmap(); Bmp1->Assign(Image1->Picture); Bmp1->PixelFormat=pf24bit; Image4->Canvas->Brush->Style = bsClear; Image4->Canvas->Pen->Color = clAqua; for(y=0;y { ptr=(Byte*) Bmp1->ScanLine[y]; for(x=0;x { if(ptr[x*3] == 255) { CCL(Bmp1, x, y); } } delete Bmp1; } //--------------------------------------------------------------------------- void __fastcall TForm1::CCL(Graphics::TBitmap *Bmp1, int x, int y) { SetPixel(Bmp1->Canvas->Handle, x, y, clBlack); Image4->Canvas->Pixels[x][y] = clRed; Memo1->Lines->Add("X:" IntToStr(x) " Y: " IntToStr(y)); Application->ProcessMessages(); if (Bmp1->Canvas->Pixels[x 1][y]==clWhite) //向右走 CCL(Bmp1, x 1, y); if (Bmp1->Canvas->Pixels[x][y 1]==clWhite) //向下走 CCL(Bmp1, x, y 1); if (Bmp1->Canvas->Pixels[x-1][y]==clWhite) //向左走 CCL(Bmp1, x-1, y); if (Bmp1->Canvas->Pixels[x][y-1]==clWhite) //向上走 CCL(Bmp1, x, y-1); if (Bmp1->Canvas->Pixels[x 1][y-1]==clWhite) //向右上走 CCL(Bmp1, x 1, y-1); if (Bmp1->Canvas->Pixels[x 1][y 1]==clWhite) //向右下走 CCL(Bmp1, x 1, y 1); if (Bmp1->Canvas->Pixels[x-1][y-1]==clWhite) //向左上走 CCL(Bmp1, x-1, y-1); if (Bmp1->Canvas->Pixels[x-1][y-1]==clWhite) //向左下走 CCL(Bmp1, x-1, y-1); } [/code] 結果會把原圖白點全部畫出來,請問有哪些地方要改的,才會只畫出封閉區域 ![]() |
carstyc
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
|
jwu2010
一般會員 ![]() ![]() 發表:2 回覆:1 積分:0 註冊:2009-05-09 發送簡訊給我 |
|
carstyc
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |