Я играл с 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
, программа зависает именно от этой функции.Есть ли какая-либо причина, почему, или я просто неправильно использую эту функцию?