2014-12-01 55 views
1

夥計們,請你幫我解決這個錯誤。 我真的不知道發生了什麼,但它有一個NullPointerException並繼續終止我的程序。笨Java功能+ OpenCV

我知道,在opencv中,如果使用函數Mat.get(row, col),就會像這樣返回到BGR Color空間的double數組。

double[] value = new double[]({B, G, R}); 

但我有一個例外,每當我想找出最新的陣列的價值翻倍 會有人檢查了這一點? 這裏是我的功能:

public Mat defineContour(Mat src, Mat dst) { 
    double[] value;// = new double[]{0, 0, 0}; 
    double[] s = new double[]{0, 0, 255}, p1, p2, p3; 
    for(int i = src.rows(); i > 0; i--) { 
     for(int j = 0; j < src.cols(); j++) { 
      value = src.get(i, j); 
      System.out.println(value[0]); 
     }// for j 
    }//for i 

    return dst; 
}//defineContour 

我只是想檢查並打印的價值值[0],這是一個double [],它有三個要素。 (BGR),所以我期待給定的對象有一個值。

它不斷終止整個程序的這個異常。請幫忙!

+0

任何時候拋出異常,發佈堆棧跟蹤的異常 – 2014-12-01 19:52:47

回答

2

您應該從src.rows()-1索引而不是src.rows()。 當你引用Mat的實際大小時,你得到的值是null而不是數組。這使得您value等於null,並且當您嘗試獲取值的第一個元素時:value[0],NPE被拋出。

+0

謝謝你解決了我的問題!但我想我不需要用scr.cols()做同樣的事情()我認爲?呵呵。你能解釋爲什麼我需要從src.rows()-1索引它嗎? – 2014-12-01 20:07:27

+0

你說得對,我糾正了我的答案。因爲如果src.height()等於10,這意味着有10行。但他們從0變爲0,最後一個變爲9。所以'src.get(src.height(),_)'表示你試圖讓單元格超出允許的最大索引。 – 2014-12-01 20:18:20

+0

Got it!謝謝 :) – 2014-12-01 20:20:54