tracker.update () всегда возвращает false на android opencv 3.4.8 - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь обнаружить и отследить объект с помощью opencv в видео.

когда я использую tracker.update, он всегда возвращает false. (Редко возвращается истина.)

Я использую модель трекера MedainFlow.

Ниже мой код. Я использую openCVLibrary 3.4.8

    private void processing(Classifier.Recognition result){

        if(mDrawing == Drawing.DRAWING){
            ...        

            mTracker = TrackerMedianFlow.create();
            mTracker.init(mImageGrabInit, mInitRectangle);

            mDrawing = Drawing.TRACKING;

        }
        else{
            //Tracking

            org.opencv.core.Rect2d trackingRectangle = new org.opencv.core.Rect2d(0, 0, 1,1);

            boolean update = mTracker.update(mImageGrab, trackingRectangle);

            if(update){
                ...
            }

            trackingOverlay.postInvalidate();
        }

        notFirst = true;
    }

mImageGrab обновляется при захвате изображения.

                        int bytes = rgbFrameBitmap.getRowBytes()*rgbFrameBitmap.getHeight();
                        ByteBuffer bb = ByteBuffer.allocate(bytes);

                        rgbFrameBitmap.copyPixelsToBuffer(bb);

                        Utils.bitmapToMat(rgbFrameBitmap, mImageGrab);

                        org.opencv.core.Core.transpose(mImageGrab, mImageGrab);
                        org.opencv.core.Core.flip(mImageGrab, mImageGrab, 1);
                        org.opencv.imgproc.Imgproc.resize(mImageGrab, mImageGrab, new org.opencv.core.Size(240, 320));   //640,480
                        int bytes = rgbFrameBitmap.getRowBytes()*rgbFrameBitmap.getHeight();
                        ByteBuffer bb = ByteBuffer.allocate(bytes);

                        rgbFrameBitmap.copyPixelsToBuffer(bb);

                        Utils.bitmapToMat(rgbFrameBitmap, mImageGrab);

                        org.opencv.core.Core.transpose(mImageGrab, mImageGrab);
                        org.opencv.core.Core.flip(mImageGrab, mImageGrab, 1);
                        org.opencv.imgproc.Imgproc.resize(mImageGrab, mImageGrab, new org.opencv.core.Size(240, 320));   //640,480
...