1

マトリックスの画像ストアの色相を変更しようとしています。split() 関数を使用して色相チャネルを取得しましたが、その色相を変更できません。関数 set(Scalar scalar) を使用して色相を変更していますが、画像に変化は見られません。

        Mat eyeball_HSV = new Mat();
        Mat dest = new Mat();       
        Mat eye = new Mat();

        eye = mRgba.submat(eye_template);

        List<Mat> hsv_channel = new ArrayList<Mat>();

           Imgproc.cvtColor(eye, eyeball_HSV, Imgproc.COLOR_RGB2HSV, 0);

          // get HSV channel 
        //hsv_channel[0] is hue
        //hsv_channel[1] is saturation
        //hsv_channel[2] is visibility
        Core.split(eyeball_HSV, hsv_channel);

        try
        {
             hsv_channel.get(0).setTo(new Scalar(145,25,45));
             Log.v(TAG, "Got the Channel!");
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            Log.v(TAG, "Didn't get any channel");
        }

        Imgproc.cvtColor(eyeball_HSV, dest, Imgproc.COLOR_HSV2RGB);
        Imgproc.cvtColor(dest, eye, Imgproc.COLOR_RGB2RGBA);
4

1 に答える 1

0

コードを変えるだけ

hsv_channel.get(0).setTo(new Scalar(145,25,45));

hsv_channel.get(0).setTo(new Scalar(145)); // whatever your value

hsv_channel.get(0) はシングル チャネル Mat であるため、Scalar 値は single にする必要があります。

編集:-

ここでOpenCV カメラのプレビューの例を見ることができます

Tutorial1Activity.java でメソッドを確認できます

public Mat onCameraFrame(CvCameraViewFrame inputFrame)

このメソッドにこれらの行を追加します

       src = inputFrame.rgba();  
       Imgproc.cvtColor(src, hsv,Imgproc.COLOR_RGB2HSV );     
       Core.split(hsv, hsv_channel);
      // Imgproc.equalizeHist(hsv_channel.get(0), hsv_channel.get(0));
       hsv_channel.get(0).setTo(new Scalar(64));
       Core.merge(hsv_channel, hsv);
       Imgproc.cvtColor(hsv, src,Imgproc.COLOR_HSV2RGB );     
       //return hsv_channel.get(0);
       return src;
于 2013-12-11T07:21:38.890 に答える