2017-04-16 8 views
0

RGB画像(http://www.kavim.com/uploads/signs/tn__51A2376.JPG) を別々のチャンネルに分割し、それぞれのチャンネルにスレッショルドを合わせてマージしてみましょう。私が理解できないのは何マージされたRGB画像をグレースケールに変換するOPENCV ANDROID

enter image description here

は、私はグレースケールにマージされた画像を変換しようとした場合、私は(代わりではなくグレースケール画像)このカラー閾値出力を取得する理由は、です。

public Mat onCameraFrame(CvCameraViewFrame inputFrame) { 
     Mat rgba = inputFrame.rgba(); 
     Size sizeRgba = rgba.size(); 
     Mat grayInnerWindow1; 
     Mat rgbaInnerWindow; 

     int rows = (int) sizeRgba.height; 
     int cols = (int) sizeRgba.width; 

     int left = cols/8; 
     int top = rows/8; 

     int width = cols * 3/4; 
     int height = rows * 3/4; 

      rgbaInnerWindow = rgba.submat(top, top + height, left, left + width); 

     ArrayList<Mat> channels = new ArrayList<Mat>(3); 

     Mat src1= Mat.zeros(rgbaInnerWindow.size(),CvType.CV_8UC3); 

     Core.split(rgbaInnerWindow, channels); 

     Mat b = channels.get(0); 
     Imgproc.threshold(b, b, 0, 70, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 
     Mat g = channels.get(1); 
     Imgproc.threshold(g, g, 0, 70, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 
     Mat r = channels.get(2); 
     Imgproc.threshold(r, r, 90, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 

     Core.merge(channels, src1); 
     Imgproc.medianBlur(src1, src1, 3); 

     Imgproc.threshold(src1,rgbaInnerWindow,0, 255, Imgproc.THRESH_BINARY); 
     Imgproc.cvtColor(rgbaInnerWindow,src1, Imgproc.COLOR_BGR2GRAY); 

       rgbaInnerWindow.release(); 

      return rgba; 
     } 
    } 

答えて

0

問題は、inputFrame.rgba()として設定されたオブジェクトをグレーに変換しようとしていたことでした。

このため、私はinputFrame.gray()として別のマットセットを作成し、それを変換しようとしました。

Mat rgb = inputFrame.rgba(); 
Mat gray = inputFrame.gray(); 
Mat grayInnerWindow = gray.submat(top, top + height, left, left + width); 
Mat rgbaInnerWindow = rgba.submat(top, top + height, left, left + width); 
//SOME CODE 
Imgproc.cvtColor(rgbaInnerWindow,grayInnerWindow, Imgproc.COLOR_BGR2GRAY); 

これは今ように機能します。

関連する問題