OpenCV Android Плохие результаты с отслеживанием распредвала

Я пытаюсь реализовать приложение для отслеживания объектов для Android, используя метод camshift. До сих пор мне удалось реализовать метод camshift и запустить его на моем планшете Android. К сожалению, он не работает должным образом... Когда я запускаю приложение, происходит доступ к камере устройства, и часть изображения будет выбрана в качестве объекта отслеживания. Гистограмма объекта вычисляется с использованием Imgproc.calcHist функция.

После этого каждый раз, когда камера дает кадр Imgproc.calcBackProject используется на изображении с камеры и с помощью Imgproc.calcBackProject Функция вычисляет новое местоположение объекта. К сожалению, вместо отслеживания выбранного объекта, отслеживание смещается в верхнем левом углу экрана и остается там. Вот соответствующий код:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

     //http://docs.opencv.org/3.1.0/db/df8/tutorial_py_meanshift.html#gsc.tab=0

     //take first frame of the video
    mCamera = inputFrame.rgba();

     if(objectTaken == false){
         // ich erstelle einen Beispielframe 
         trackingFrame = new Rect(mCamera.cols()/4,mCamera.rows()/4,600,500);

         System.out.println("SIZZEEE: "+trackingFrame.size().toString());
         System.out.println("Position: "+trackingFrame.x +" / "+ trackingFrame.y);

         object = mCamera.submat(trackingFrame.x, trackingFrame.x+trackingFrame.width, trackingFrame.y, trackingFrame.y+trackingFrame.height);
         hsvObject = new Mat();
        Imgproc.cvtColor(object, hsvObject, Imgproc.COLOR_BGR2HSV);


        lHSV = Arrays.asList(hsvObject);
        //MatOfInt mChannels = new MatOfInt(0, 1);
        mChannels = new MatOfInt(0);
        histogram = new Mat();
        histSize = new MatOfInt(180);
        ranges=new MatOfFloat(0,180);


        Imgproc.calcHist(lHSV, mChannels, new Mat(), histogram , histSize , ranges);
        //Core.normalize(histogram, histogram, 0, 255, Core.NORM_MINMAX, -1, new Mat());
        Core.normalize(histogram, histogram, 0, 255, Core.NORM_MINMAX);

        //return mCamera;
        objectTaken= true;

     }

     //set up the ROI for tracking
    // grab the ROI for the bounding box and convert it to the HSV color space
    //object = new Mat(mCamera,trackingFrame);

    backproj = new Mat();
    Imgproc.calcBackProject(lHSV, mChannels, histogram, backproj, ranges, 1);

    //box = Video.CamShift(backproj, trackingFrame, new TermCriteria(TermCriteria.MAX_ITER|TermCriteria.EPS, 50, 0.001));
    box = Video.CamShift(backproj, trackingFrame, new TermCriteria( TermCriteria.EPS | TermCriteria.COUNT, 10, 1 ));
    trackingFrame = box.boundingRect(); 
      pt1 =new Point(trackingFrame.x,trackingFrame.y);
      pt2 =new Point(trackingFrame.x+trackingFrame.width,trackingFrame.y+trackingFrame.height);
     RED = new Scalar(255,0,0);
    Imgproc.rectangle(mCamera, pt1, pt2, RED);
    return mCamera;
}

Кто-нибудь знает, как заставить работать трекинг? Я видел видео распредвала, которое выглядело очень многообещающим, моим приложением далеко не так хорошо, как те:(

0 ответов

Другие вопросы по тегам