2014-12-01 56 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