求出物體的中心位置 |
答題得分者是:pcboy
|
z9278170
一般會員 發表:5 回覆:8 積分:2 註冊:2007-06-24 發送簡訊給我 |
假設我有一張圖片大小為100*100,x和y50-70為紅色,其他為白色,我要求出這個紅色物件的中心位置,程式碼如下:想請問各位大大,我這樣的寫法可行嗎?還有一個問題就是,理論來說當i跑到50時,就可以算出中心位置了,但是i還是會繼續跑,這以會很浪費我的運算速度,而且感覺結果就會錯了,要怎麼解決呢?麻煩各位大大了
(其中xseat、 yseat、 count1、count2皆為全域變數 <textarea class="cpp" rows="10" cols="60" name="code">for(i=0;i<=100;i ) { for(j=0;j<100;j ) { if (R(i,j)==255&& G(i,j)==0 && B(i,j)==0) //RGB代表色彩色模型 { connect1(i,j); connect2(i,j); connect3(i,j); connect4(i,j); } } } xcenter=xseat/count1; //xcenter代表物件中心的x座標值, xseat表物件的x座標值,count1計數次數 ycenter=yseat/count2; //ycenter代表物件中心的x座標值,yseat表物件的x座標值,count2計數次數 void connect1(int ii,int jj) { xseat=ii; count1 =1; //判斷 (x 1,y) if (R(ii 1,,jj)==255&& G(ii 1,j,j)==0 && B(ii 1,j,j)==0) connect1(ii 1,,jj); } void connect2(int ii,int jj) { xseat=ii; count1 =1; //判斷 (x-1,y) if (R(ii-1,,jj)==255&& G(ii-1,j,j)==0 && B(ii-1,j,j)==0) connect2(ii-1,jj); } void connect3(int ii,int jj) { yseat=jj; count2 =1; //判斷 (x,y 1) if (R(ii,,jj 1)==255&& G(ii,j,j 1)==0 && B(ii,j,j 1)==0) connect3(ii,jj 1); } void connect4(int ii,int jj) { yseat=jj; count2 =1; //判斷 (x,y-1) if (R(ii,,jj-1)==255&& G(ii,j,j-1)==0 && B(ii,,j,j-1)==0) connect4(ii,jj-1); } </textarea> |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
以下是假設您的物體是方形所作尋找物件左上/右下座標的方式,請參考。
<textarea class="cpp" rows="10" cols="60" name="code">int i,j,w,h; int oLeft,oTop,oRight,oBottom; int centerX,centerY; bool ObjectFound=false; for(i=0;i<100;i ) { for(j=0;j<100;j ) { if (R(i,j)==255 && G(i,j)==0 && B(i,j)==0) //RGB代表色彩色模型 { // 找到左上角(起點) ObjectFound=true; oLeft=i; oTop=j; for(w=i 1;w<100;w ) // 向右找 { if(R(w,j)==255 && G(w,j)==0 && B(w,j)==0) //RGB代表色彩色模型 continue; // 還是物件點, 繼續找 else break; // 不再是物件點, 結束尋找 } oRight=w-1; for(h=j 1;h<100;h ) // 向下找 { if(R(i,h)==255 && G(i,h)==0 && B(i,h)==0) //RGB代表色彩色模型 continue; // 還是物件點, 繼續找 else break; // 不再是物件點, 結束尋找 } oBottom=h-1; break; // 只找一個物件, 己找到, 可以結束尋找了 } } } if(ObjectFound) // 有找到才能算中心 { centerX=(oLeft oRight)/2; centerY=(oTop oBottom)/2; } else { ShowMessage("找不到!!"); } </textarea>
------
http://www.ViewMove.com
編輯記錄
yckuo 重新編輯於 2007-09-10 14:59:43, 註解 套用程式碼編輯,以避免逗點被瀏覽器自動消失.‧
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
z9278170
一般會員 發表:5 回覆:8 積分:2 註冊:2007-06-24 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
z9278170
一般會員 發表:5 回覆:8 積分:2 註冊:2007-06-24 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
dllee 是假設 "物體一定是方形,那只要找出左上角及右下角的座標即可。"
> 因為我要做的是動態影像,所以萬一找到的第一點是雜訊的話,而且剛合符合IF條件的要求的話,那 oLeft 跟oTop不就變成是雜訊了嗎,真正的物體不就找不到了嗎? 您又蹦出了雜訊問題, 那當然dllee兄的方法未必合適 能盡量說清狀況嗎? 您是用 WebCam 或 DV 拍攝物體, 要找出物體中心 ? 紅色物體是單一物體 ? 還是一個物體可能有好幾個分離的紅色部分 ? 或者甚至有多個物體 ?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
z9278170
一般會員 發表:5 回覆:8 積分:2 註冊:2007-06-24 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
誤判少數幾點沒關係, 因為物體的點數很多, 程式如下
<textarea class="cpp" rows="10" cols="60" name="code">xtotal=0; ytotal=0; count=0; for(i=0;i<=100;i ) { for(j=0;j<100;j ) { if (R(i,j)==255&& G(i,j)==0 && B(i,j)==0) //RGB代表色彩色模型 { xtotal=xtotal i; ytotal=ytotal j; count=count 1; } } } xcenter=xtotal/count; //xcenter代表物件中心的x座標值 ycenter=ytotal/count; //ycenter代表物件中心的y座標值 </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
z9278170
一般會員 發表:5 回覆:8 積分:2 註冊:2007-06-24 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
您一直提到「理論來說當i跑到50時,就可以算出中心位置了」
請問一下,您用的是什麼理論呢? 以 pcboy #9 的作法,已經是把問題解決了喔。 您之後強調,可能有雜訊,又物體可能會動等等,這樣就只有用 pcboy #9 的方法才能解。 您一直提的跑到 50 就算出來,那是您的「人工智慧」判斷,而不是電腦程式的判斷, 請您不要搞混了。 要電腦作計算或要偵測,必需要有前題及假設,如果您要把它套用到與前題/假設不符的狀況, 那它自然是無法處理,同時您的前題及假設也必需與現況相符,否則,前題及假設都是錯的了, 按此前題及假設作出來的程式自然是無法運作的。
------
http://www.ViewMove.com |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
z9278170
一般會員 發表:5 回覆:8 積分:2 註冊:2007-06-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |