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

我尝试在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] +""); 

通常我得到了返回的tmp数组。 但在一些像素,我得到了返回“空”。 (这点在图片的范围!)

那么为什么我在一些数组和其他一些“空”的坐标,以及如何解决?

Solutions Collecting From Web of "通过使用mat.get(),像素的OpenCV颜色值有时返回null"

在OpenCV中,通过Mat.get(row,col)获取像素信息,X和Y的含义发生了变化:使用Y作为行,使用X作为col。

 Mat.get(Y, X); 

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

我首先检查你的MatMat::channels()有多less个Mat::channels() ,然后通过它们访问它们:

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

要分别访问每个像素,您可以在使用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)); } } }