線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1614
推到 Plurk!
推到 Facebook!

如何判斷圖片上的封閉區域

缺席
jwu2010
一般會員


發表:2
回覆:1
積分:0
註冊:2009-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-10 17:22:21 IP:118.160.xxx.xxx 訂閱
圖片
如上圖 左邊是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;yHeight;y )
{
ptr=(Byte*) Bmp1->ScanLine[y];
for(x=0;xWidth;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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-11 00:01:07 IP:219.84.xxx.xxx 訂閱
從一個紅點就開始往四面八方看看有無紅點,有就繼續往下一個點走。

走到圖的邊綠就是開放空間。

能走回原本的紅點就是封閉空間
jwu2010
一般會員


發表:2
回覆:1
積分:0
註冊:2009-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-11 19:25:23 IP:203.68.xxx.xxx 訂閱
有詳細的程式碼可以參考嗎?
我試了很久, 也下了一些判斷,結果還是一樣!!!

carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-11 21:47:44 IP:219.84.xxx.xxx 訂閱
你已經可以成功的做出邊綠化了,怎麼會試不出來呢?

這種東西應該不會有現成的程式碼吧...

你倒是可以說說你做了什麼...發生了什麼問題....提出來大家討論看看。
系統時間:2017-10-19 6:12:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!