Преобразование объекта Mat в Float32[1,66,200,3] android studio

#java #android-studio #opencv #tensorflow-lite

#java #android-studio #opencv #tensorflow-lite

Вопрос:

Я пытаюсь преобразовать объект Mat в float32 [1,200,66,3] в Android studio, чтобы передать мою модель tflite.

    @Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

        Mat frame = inputFrame.rgba();
        Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGBA2RGB);
        Imgproc.cvtColor(frame, frame, Imgproc.COLOR_RGB2YUV);
        Imgproc.GaussianBlur(frame, frame, new Size(3, 3), 0, 0);
        Imgproc.resize(frame, frame, new Size(200, 66));
        frame.convertTo(frame, CV_32F);
       
        float[][] outputs = new float[1][1];
        float[][][][] inputs = new float[1][200][66][3]; //desired form to model


//
        interperter.run(inputs ,outputs);
        System.out.println("output: "   outputs[0][0]);

        return frame;
    }

 

как правильно преобразовать фрейм Mat?

Спасибо

Редактировать: работает как шарм:

 float[][][][] inputs = new float[1][200][66][3];
float fs[] = new float[3];
   for( int r=0 ; r<f.rows() ; r   ) {
        for( int c=0 ; c<f.cols() ; c   ) {
            f.get(r, c, fs);
            inputs[0][c][r][0]=fs[0]/255;
            inputs[0][c][r][1]=fs[1]/255;
            inputs[0][c][r][2]=fs[2]/255;
        }   
   }
 

Комментарии:

1. Я в замешательстве, вы решили проблему?

2. Чтобы ускорить процесс, вы можете создать метод jni, который копирует изображение из объекта Mat в объект ByteBuffer.