兩個點相比...怎樣才叫最相近呢?? |
尚未結案
|
kunawa
一般會員 發表:17 回覆:8 積分:5 註冊:2004-04-30 發送簡訊給我 |
大家好:
小弟想做個物件追蹤
我的方法是先給予電腦一個rgb值(也就是在物件上找個點)...
然後接下來在影片轉成的那些圖片裡...我就讓電腦依這個點來尋找
ex:第一張圖片找到這個點...而第二張圖片因為物件有些許移動...
所以我就找它的四面八方...也就是九宮格...找到最接近原來那個點的..
我就視它為下一個目標點...
不過我很單純的以為只要把rgb三個值加起來去跟另外那九個點相減...
差異最小的我就視為下一個點..
然後第三張圖片再依第二張圖片找的那個點來向外跟那八個點比較
可是出來的結果並不如預期
請問要怎樣去比較rgb三個值才算是最接近的點呢??
以下是我的寫法...可是不知道爲什麼它都沒有跟著物件..而是一直停在原地
請問我是哪裡寫錯了...或是想錯了呢??
謝謝
... if(buffer1_B[row][col]==B && buffer1_G[row][col]==G && buffer1_R[row][col]==R) { /*我先開一張圖片取得物件上的某一點...然後讓電腦記住這一點的位址(x,y)...之後的圖片都直接在min_row和min_col這個點上找 min_row = row; min_col = col; } for(int x=0; x < 130; x ) { //因為有130張圖片...所以讀130次 int min = 256;//隨便設一個值 float temp; for(int row = 0; row < Height; row ) { ptr2 = (Byte *)Bmp2->ScanLine[row]; for(int col = 0; col < Width; col ) { buffer2_B[row][col] = ptr2[col*3]; buffer2_G[row][col] = ptr2[col*3 1]; buffer2_R[row][col] = ptr2[col*3 2]; } } for(int x = -1; x < 2; x ) { for(int y = -1; y < 2; y ) {//這是我參考paper上的公式 temp = sqrt((buffer2_B[min_row y][min_col x]-B)*(buffer2_B[min_row y][min_col x]-B) (buffer2_G[min_row y][min_col x]-G)*(buffer2_G[min_row y][min_col x]-G) (buffer2_R[min_row y][min_col x]-R)*(buffer2_R[min_row y][min_col x]-R)); if(temp < min) { min = temp; min_row = min_row y; min_col = min_col x; } } } //找出的這個點就當成下一次比較的點... B = buffer2_B[min_row][min_col]; G = buffer2_G[min_row][min_col]; R = buffer2_R[min_row][min_col]; ... |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |