Почему в OpenCV обнаружение функции MultiScale3 приводит к зависанию моей программы? - PullRequest
0 голосов
/ 19 июня 2019

Я играл с OpenCV Java и решил посмотреть, смогу ли я вывести значения достоверности, которые возвращал CascadeClassifier OpenCV, запустив функцию deteMultiScale3.Мой код выглядит следующим образом:

//...
if (this.capture.isOpened())
{
    this.cameraActive = true;
    // grab a frame every 33 ms (30 frames/sec)
    Runnable frameGrabber = new Runnable() {
        @Override
        public void run()
        {
            // run a couple of iterations before you process the faces
            for(int i = 0; i < 3; i++) {
                // effectively grab and process a single frame
                Mat frame = grabFrame();
                MatOfInt rl = new MatOfInt();
                MatOfDouble lw = new MatOfDouble();
                if(i == 0) {
                    classifier.detectMultiScale3(frame, faces, rl, lw);
                    eyeclass.detectMultiScale(frame, eyes);
                }
                for(Rect rect : faces.toArray()) {
                    Imgproc.rectangle(
                        frame,
                        new Point(rect.x, rect.y),
                        new Point(rect.x + rect.width, rect.y + rect.height),
                        new Scalar(255, 0, 0),
                        5
                    );
//                  String print = Double.toString(values[i]);
//                  Imgproc.putText(frame, print, new Point(rect.x, rect.y), 0, 0.5, new Scalar(255, 255, 255));
                }
                for(Rect rect : eyes.toArray()) {
                    Imgproc.rectangle(
                        frame,
                        new Point(rect.x, rect.y),
                        new Point(rect.x + rect.width, rect.y + rect.height),
                        new Scalar(0, 0, 255),
                        2
                    );
                }
                // convert and show the frame
                Image imageToShow = mat2Image(frame);
                updateImageView(currentFrame, imageToShow);
            }
        }
    };

    this.timer = Executors.newSingleThreadScheduledExecutor();
    this.timer.scheduleAtFixedRate(frameGrabber, 0, 99, TimeUnit.MILLISECONDS);

    // update the button content
    this.button.setText("Stop Camera");
}

Всякий раз, когда я заменяю функцию detectMultiScale3 просто detectMultiScale, программа работает, но всякий раз, когда я использую detectMultiScale3, программа зависает именно от этой функции.Есть ли какая-либо причина, почему, или я просто неправильно использую эту функцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...