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] +"");

通常、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

最初にあなたMatが持っているチャンネルの数を確認してから、次の方法Mat::channels()でアクセスします。

double[] 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 に答える