使用mat.get()返回像素的OpenCV颜色值有时返回null

时间:2013-04-02 12:30:41

标签: java android opencv

我尝试在Android和OpenCV 2.4.4上使用mat.get(inx,int y)获取像素的RGB值。

Mat img = Utils.loadResource(getBaseContext(), R.drawable.ex3);
double[] tmp = img.get(100, 100);
if(printLog) Log.v(tag, "Color: "+ tmp[0] +","+ tmp[1] +","+ tmp[2] +"");

Normaly我得到了返回的tmp-Array。但在某些像素,我得到了返回“null”。 (这些点在图片的范围内!)

那么为什么我在一些坐标上得到一个数组,在另一些坐标上得到“null”以及如何修复它?

3 个答案:

答案 0 :(得分:11)

在OpenCV中,通过使用Mat.get(row,col)获取pixelinformation,X和Y的含义发生了变化:使用Y表示行,使用X表示col。

Mat.get(Y, X);

所以在我的情况下,我超出范围,但openCV没有返回异常。它返回“null”

答案 1 :(得分:0)

我首先会检查MatMat::channels()获得的频道数量,然后通过以下方式访问它们:

  

double [] tmp = img.at(100,100);

答案 2 :(得分:-1)

要分别访问每个像素,您可以执行此操作,如果您使用的是https://github.com/bytedeco/javacv

      IplImage image = cvLoadImage("path/to/image/get.jpg");

      public void colorProcess(IplImage image){
        CvMat result = CvMat.create(image.width(),image.height(), CV_32F);
        CvMat ff =image.asCvMat(); 

        for(int a=0;a<result.cols();a++){
             for(int b=0;b<result.rows();b++){

                CvScalar rgb = cvGet2D(ff, a, b);
                System.out.println("blue "+rgb.getVal(0)+"green "+rgb.getVal(1)+"red    "+rgb.getVal(2));

              }
        }

      }