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

Java 使用mat.get()的像素的OpenCV颜色值有时返回null,java,android,opencv,Java,Android,Opencv,我尝试在Android和OpenCV 2.4.4上使用mat.get(inx,inty)获取像素的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数组。但在某些像素处,返回

我尝试在Android和OpenCV 2.4.4上使用mat.get(inx,inty)获取像素的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数组。但在某些像素处,返回“null”。(该点在图片范围内!)


那么,为什么我在某些坐标处得到一个数组,而在另一些坐标处得到一个“null”,以及如何解决这个问题呢?

我首先要检查你的
Mat
通过
Mat::channels()
获得了多少个通道,然后通过以下方式访问它们:

双[]tmp=img.at(100100)


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

Mat.get(Y, X);

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

以单独访问每个像素如果使用

IplImage image=cvLoadImage(“path/to/image/get.jpg”);
公共空白彩色处理(IplImage图像){
CvMat result=CvMat.create(image.width()、image.height()、CV_32F);
CvMat ff=image.asCvMat();

对于(int a=0;a在
cv::Mat
中没有
get
这样的方法。
img
的类型是什么?img的类型是Mathier是该get-in-Mat的文档:您的图像有3个通道吗?这是
System.out.println(img.channels())的输出
?看起来一切都是正确的。您是否尝试将Mat写入图像文件,看看其表示是否正常?换句话说,如果像素没有失真…每次使用后也尝试
img.release();
。我已经有过类似的问题,因为内存问题。它会引发异常吗?
      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));

              }
        }

      }