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

尋邊~找出座標

 
rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-27 13:42:17 IP:163.23.xxx.xxx 訂閱
圖為640X480
我參考大家程式所改的~
原圖http://www.wretch.cc/album/show.php?i=rabbit78585&b=1&f=1412425917&p=2
由下列程式碼尋邊標記後塗藍色 http://www.wretch.cc/album/show.php?i=rabbit78585&b=1&f=1412425916&p=1 而是把全部白色變藍色
我想請教各位大大是要怎麼改下列程式~只尋白色外圍標記成藍色如圖一整圈
如圖http://www.wretch.cc/album/show.php?i=rabbit78585&b=1&f=1412425918&p=3 不好意思有點不太清楚(白色外圍有一圈藍色)
謝謝~
程式碼:
void __fastcall TForm1::Button8Click(TObject *Sender)
{
Image2->Picture = NULL;
Memo1->Clear();
Byte *ptr = NULL;
int i,j;
Graphics::TBitmap *TempBitmap,*OrgBitmap;
TempBitmap = Image1->Picture->Bitmap;
TempBitmap->PixelFormat = pf24bit;// (TPixelFormat)6;//pf8bit;
Image1->Canvas->Brush->Style = bsClear;
Image1->Canvas->Pen->Color = clAqua;
for(j=0;jHeight;j )
{
ptr = (Byte *)TempBitmap->ScanLine[j];

for(i=0;iWidth;i )
{
if (ptr[i*3] == 255)
{
CCL(TempBitmap, i, j);
}
}
}
//delete TempBitmap;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CCL(Graphics::TBitmap *TempBitmap, int i, int j)
{

SetPixel(TempBitmap->Canvas->Handle, i, j, clBlack);
Image1->Canvas->Pixels[i][j] = clBlue;
Memo1->Lines->Add("X:" IntToStr(i) " Y: " IntToStr(j));
Application->ProcessMessages();

if (TempBitmap->Canvas->Pixels[i 1][j]==clWhite) //向右走
CCL(TempBitmap, i 1, j);
if (TempBitmap->Canvas->Pixels[i][j 1]==clWhite) //向下走
CCL(TempBitmap, i, j 1);
if (TempBitmap->Canvas->Pixels[i-1][j]==clWhite) //向左走
CCL(TempBitmap, i-1, j);
if (TempBitmap->Canvas->Pixels[i][j-1]==clWhite) //向上走
CCL(TempBitmap, i, j-1);
}
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-27 15:19:50 IP:218.170.xxx.xxx 訂閱
這不是影像處理會教到的東西嗎?
好像是用什麼分水嶺的做法就可以做出來了吧。
johnpage
初階會員


發表:0
回覆:79
積分:40
註冊:2004-08-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-28 00:15:25 IP:218.175.xxx.xxx 訂閱
由於外在光源無法控制
故此圖分析技術只能用小畫家所繪之圖形
因為還沒遇到邊緣無法成封閉區
例如: ㄈ


rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-28 18:24:40 IP:218.166.xxx.xxx 訂閱
好像誤會我的意思~
圖是640X480~我把白點找出來變成藍色(用意是確定那點有找到)~
而找出的白點座標把他傳到Memo1.而知道白點(X.Y).座標~
如下列: 1=>白色 0=>黑色
<----------- ---- 長共有640點像素---------------->
000000001111000000000111000......00000
00000000111110000000011111000.........00
. 寬共有480點像素
.
00000000111100000000000111100000...0
以上為640X480的二值化後的圖形~但以利用上面程式已經把所有白色像素點1..已經找到也把座標傳到Memo1
但想請教各位大大!怎麼改寫程式找到最跟最如下面(紅色1)..由左往右掃遇到第一個1把座標傳到Memo1 ,而跳下一列再掃~
由右往左掃遇到第一個1把座標傳到Memo1 ,而跳下一列再掃~
00000000011111000000011111000...........0=>640像素點
謝謝各位大大!



暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-28 19:48:27 IP:218.170.xxx.xxx 訂閱
嗯。真的越看越不懂你的問題在那邊了 @@
rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-29 01:00:14 IP:218.166.xxx.xxx 訂閱
...........
我一開始有三張圖片
第一張圖..是640X480===>中間有白色方形
第二張圖..是我利用現在已完成一半的程式所跑出來的圖===>程式自動掃描找出所有白色地方標記成藍色..有標記藍色的點也把座標紀錄下來到Memo1
第三張圖..是我想請教各位大大..我不想讓整個白色方形都標記..只想在方形框框外圍一圈標記成藍色順便記下座標
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-29 08:00:16 IP:220.131.xxx.xxx 訂閱
那你寫到那個部份了?
rabbit78585
一般會員


發表:11
回覆:22
積分:6
註冊:2006-08-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-12-29 08:45:21 IP:218.166.xxx.xxx 訂閱
先謝謝 johnpage暗黑破壞神 這兩位大大
johnpage 我知道你說我的的問題出在哪
圖ㄈ形狀~用上面程式下去標記白色點~會把全部白色點都標出來與記錄座標
而用我想改的程式下去標記只能標記到某部份 PS:( )是只圖形
如(由左往右掃白色點) 只能掃到與標記 ( l ) 而無法掃到標記到 ( 二 )
(由右往左掃白色點)也只能掃到與標記( l ) 跟 ( : ) 也無法掃到標記到 ( 二 )
這樣好了 ( 二 ) 這就不標記了 只要由左向右 與 由右向左 掃描出來跟紀錄座標就好

暗黑破壞神 我現在程式只是初步~看到白點就全部掃出來與標記跟紀錄座標
但因 johnpage 的提示用左向右 或 右向左 的程式只能標記某部份~
而現在我想說就標記某部份就好!請教各位大大怎麼改寫!謝謝



johnpage
初階會員


發表:0
回覆:79
積分:40
註冊:2004-08-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-12-29 17:03:13 IP:218.175.xxx.xxx 訂閱
所用的技術比較適合用於車牌辨識
追蹤不規則目標最好用物件法
先用LabView 來做影像處理
因為還不知道所有影像處理要如何撰寫情況下
此時先看結果 會比較有效
更方便的是LabView 可以轉成讓VB呼叫的函數
根本不需要再撰寫程式
系統時間:2024-04-25 10:11:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!