2017-05-17 22 views
0

RGBから最大値を検出したい。どうすればそれを検出できますか? のRGB値でもっとも出現している色を表示したいとします。たとえば、イメージではREDカラーの出現頻度が最も高いので、赤色で、値はパーセンテージで表示されます。私は以下のように行と画像のCOLSを取得することにより、それを試してみましたAndroidでOpenCVを使用してCameraFrameからRGBの値を検出する

public Mat onCameraFrame(CvCameraViewFrame cvf) { 
     mRgba = cvf.rgba(); 

     int rows = mRgba.rows(); 
     int cols = mRgba.cols(); 
     // int ch = mRgba.channels(); 
     double R=0,G=0,B=0; 

     for (int i=0; i<rows; i++) 
     { 
      for (int j=0; j<cols; j++) 
      { 
       double[] data = mRgba.get(i, j); //Stores element in an array 
       R = data[0]; 
       G= data[1]; 
       B = data[2]; 
      } 
     } 

     Imgproc.putText(mRgba,"R:"+R + "G:"+G +"B:"+B,new Point(10,52),Core.FONT_HERSHEY_COMPLEX,.7,new Scalar(5,255,255), 2,8,false); 
return mRgba; 
} 

が、それは多くの時間を取っていると私はonCameraFrameのコードを実装しているので、画面が遅れています。では、この方法でどのように高速に検出でき、どの方法が最適ですか?

ありがとうございました。

+0

代わりにHSV色空間を使用する色に名前を付ける場合 – Micka

+0

はい色の名前とその割合が必要です。あなたはこの質問の私に答えることができますか?あなたに巨大な要求。ありがとう –

答えて

0

イメージをR、G、Bチャンネルに分割し、各マットの合計を計算します。

vector<Mat> channels; 
split(mRgba, channels); 
B = sum(channels[0])[0]; 
G = sum(channels[1])[0]; 
R = sum(channels[2])[0]; 

R、G、Bの値を比較して、フレーム内で最も多く発生した色を特定します。

関連する問題