8

我尝试在 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”以及如何解决这个问题?

4

3 回答 3

12

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

Mat.get(Y, X);

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

于 2013-04-12T14:04:10.410 回答
0

我首先检查您使用了多少个频道MatMat::channels()然后通过以下方式访问它们:

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

于 2013-04-02T14:17:24.033 回答
-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));

              }
        }

      }
于 2014-11-22T01:35:56.767 回答