akin1107
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:12 回覆:14 積分:5 註冊:2004-07-26
發送簡訊給我
|
|
richtop
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
akin1107 您好: 如果只是要找整個框住黑白影像的邊界的話,可以想像由上下左右分別掃瞄影像,當讀到黑點表示碰到邊界,如此就能框出您要的邊界。
要是想找到每個分開區域的外框邊界,當然得再修正了。
程式供參考。
void findBoundary(TImage *image)
{
Byte **ptr;
int r, g, b, gray, index; image->Picture->Bitmap->PixelFormat = pf24bit;
ptr = new Byte*[image->Picture->Height];
for (int k=0; kPicture->Height; k++)
ptr[k] = (Byte*) image->Picture->Bitmap->ScanLine[k];
int x[2], y[2];
// up bound
bool skip = false;
for (int row=0; rowPicture->Height; row++)
{ index = 0;
for (int col=0; colPicture->Width; col++)
{ if ( ptr[row][index]==0 ) // black point meeting
{ y[0] = row;
skip = true;
break;
}
index += 3;
}
if ( skip ) break;
}
// bottom bound
skip = false;
for (int row=image->Picture->Height-1; row>=0; row--)
{ index = 0;
for (int col=0; colPicture->Width; col++)
{ if ( ptr[row][index]==0 ) // black point meeting
{ y[1] = row;
skip = true;
break;
}
index += 3;
}
if ( skip ) break;
}
// left bound
skip = false;
for (int col=0; colPicture->Width; col++)
{ index = col*3;
for (int row=0; rowPicture->Height; row++)
{ if ( ptr[row][index]==0 ) // black point meeting
{ x[0] = col;
skip = true;
break;
}
}
if ( skip ) break;
}
// right bound
skip = false;
for (int col=image->Picture->Width-1; col>=0; col--)
{ index = col*3;
for (int row=0; rowPicture->Height; row++)
{ if ( ptr[row][index]==0 ) // black point meeting
{ x[1] = col;
skip = true;
break;
}
}
if ( skip ) break;
} image->Picture->Bitmap->Canvas->Pen->Color = clRed;
image->Picture->Bitmap->Canvas->MoveTo(0,y[0]);
image->Picture->Bitmap->Canvas->LineTo(image->Picture->Width-1,y[0]);
image->Picture->Bitmap->Canvas->MoveTo(0,y[1]);
image->Picture->Bitmap->Canvas->LineTo(image->Picture->Width-1,y[1]);
image->Picture->Bitmap->Canvas->MoveTo(x[0],0);
image->Picture->Bitmap->Canvas->LineTo(x[0],image->Picture->Height-1);
image->Picture->Bitmap->Canvas->MoveTo(x[1],0);
image->Picture->Bitmap->Canvas->LineTo(x[1],image->Picture->Height-1); delete [] ptr;
} void __fastcall TForm1::Button1Click(TObject *Sender)
{
findBoundary(Image1);
}
RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
1666362
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:66 回覆:124 積分:43 註冊:2004-07-07
發送簡訊給我
|
richtop大大 bool skip = false;<---可以解釋這是什麼用法嗎??
看不懂這個的意思
![]() 我是新手 多多指教 ^^
|
richtop
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
To 1666362, 引言:
richtop大大 bool skip = false;<---可以解釋這是什麼用法嗎??
看不懂這個的意思
因為希望能跳出兩層的廻圈,所以我設了這個skip變數,先設為false,一但碰到邊界後,就設為true,如此就能藉以判斷是否要跳出外部的迴圈。 我是新手 多多指教 ^^
>>< face="Verdana, Arial, Helvetica"> RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
akin1107
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:12 回覆:14 積分:5 註冊:2004-07-26
發送簡訊給我
|
richtop大哥您好 真是謝謝您的幫助,又幫我解決了一個問題
我也是一個新手,
很多問題也是從站上透過別人的問題找到答案的,
真多虧有你們這些熱心的高手
希望小女有天也能像你們一樣解決別人的問題
真的感激不盡喔
|
richtop
資深會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
akin1107 您好: 先說好底下內容完全是跟您開玩笑,請勿介意! ![]() 您應該是想自己也能儘快幫別人解決問題,不過您用了<>小女>而不是<>小女子我>,
難道您眞的想讓大夥等到<>未來您的女兒>來幫助大家解決問題嗎?
這樣會讓大家等很久喔!< > 我也有個女兒。跟您開開玩笑!請別介意! 其實喜歡設計程式的人,女孩子佔的比例似乎不多,所以在站上有這樣的女孩子,的確應該給予更多的鼓勵!
說真的,只要是抱持認真的學習的心態(不分男女),都會得到各方的幫助,正所謂自助人助;還有在接受人家幫助後能飲水思源,會想再去幫助需要幫助的人,就更難能可貴了!< > 讓我們一起繼續努力加油! <>< face="Verdana, Arial, Helvetica">引言:
richtop大哥您好 真是謝謝您的幫助,又幫我解決了一個問題
我也是一個新手,
很多問題也是從站上透過別人的問題找到答案的,
真多虧有你們這些熱心的高手
希望 小女有天也能像你們一樣解決別人的問題
真的感激不盡喔 ![]()
>>< face="Verdana, Arial, Helvetica"> RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
spruce
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:3 回覆:11 積分:2 註冊:2005-11-05
發送簡訊給我
|
我试了怎么还是出错呢?哪位做好了,把程序传上来,让小妹学习一下吧!谢谢!!!
|