2012-12-11 95 views
0

我正在爲Android創建一個運動檢測應用程序。雖然我有我的檢測算法的問題:比較不斷重新填充的2d陣列

public boolean compareBitmaps() 
{ 

    /*I'm creating 2 x 2D arrays which will continually be repopulated 
    every 2 frames with the pixel data of that frame based on even or odd 
    (frames are collected in an ArrayList 'BIT') 
    BIT(0) will be stored in compare1 
    BIT(1) will be stored in compare2 
    BIT(2) will be stored in compare1 and so on...*/ 

    int [][] compare1 = new int[width][height]; 
    int [][] compare2 = new int[width][height]; 
    int bmpCount = BIT.size(); 

    boolean noMotion = true; 

    //This is where I determine wheter even or odd using the modulus % 
    for (int x=0; x<bmpCount; x++) 
     if(x%2!=0) 
     { 

       System.out.println("Odd"); 
       getPixels1(compare1, x); 

     } 
     else 
     { 

       System.out.println("Even"); 
       getPixels2(compare2, x); 

     } 

     //Here I'm looking to continually compare the returned pixel colours 
     // of the 2D arrays 
     if(!Arrays.deepEquals(compare1, compare2)) 
     { 
      System.out.println("No Motion"); 
      return noMotion = false; 

     } 
     else 
     { 
     return noMotion = true; 
     } 
} 

private void getPixels1(int[][] compare1, int x) 
{ 
    for(int i = 0; i<width; i++) 
    { 
     for(int j=0; j<height; j++) 
     { 

      compare1[j][i] = BIT.get(x).getPixel(j, i); 

     } 
    } 
} 

private void getPixels2(int[][] compare2, int x) 
{ 
    for(int i = 0; i<width; i++) 
    { 
     for(int j=0; j<height; j++) 
     { 
      compare2[j][i] = BIT.get(x).getPixel(j, i); 
     } 
    } 
} 

我使用println()幫我調試, - 目前控制檯打印出「奇」這(糾正我,如果我錯了)是錯誤的元素(0)?當我下一步完成應用程序休息時。

有人能看到我在做什麼錯了,任何幫助,將不勝感激

非常感謝,

+1

當你在實現運動檢測型應用程序,並比較每個偶數和奇數幀,從我的小知識,我認爲這是太快,會消耗大量的CPU功率的,我的建議是框架在低速率一些比較像15幀之後的東西。 –

+0

對不起,15幀後你比較什麼?就像比較第0幀和第14幀以及第15幀和第29幀一樣? – Ledgey1101

+0

只是一個友好的提醒。我注意到你沒有接受任何問題的答案。你知道你可以接受答案來證明它解決了你的問題嗎?只需點擊投票箭頭旁邊的複選框即可。這讓社區知道你正在積極參與你的問題。 –

回答

3

你的邏輯是相反的。

如果x % 2返回0這意味着x整除由兩個沒有餘,即甚至

4 % 2 = 0 // even 
5 % 2 = 1 // odd 
+0

謝謝,我沒有注意到那個小!錯誤,我已經根據建議調換了打印語句,但應用程序仍然會中斷,無論 – Ledgey1101

+0

嗯...我不知道getPixel1()和getPixel2()是做什麼的,但是如果關鍵是「 BIT(0)將存儲在比較1「,那麼你的排序仍然顛倒」x = 0「在」比較2「,」x = 1「在」比較1「等... – Sam

+0

我已經添加了其他方法只需嵌套for循環通過x和y並收集每個像素的像素顏色。只要奇數和偶數是分開存儲的順序並不是必須的 – Ledgey1101