OpenCV Java [WARN: 2] videoio (MSMF): невозможно захватить кадр. Ошибка: -1072875772 - PullRequest
0 голосов
/ 09 ноября 2018

Я пытался сделать простое приложение, которое открывает и закрывает камеру.Пока что открывающая часть работает, но каждый раз, когда я пытаюсь закрыть камеру, происходит такая серия событий:

  1. Съемка прекращается, но огни продолжают гореть, а изображение не очищается..
  2. Во второй раз, когда я нажимаю кнопку «Стоп», изображение очищается.
  3. После этого, всякий раз, когда я нажимаю кнопку «Старт», независимо от того, сделал ли я шаг 2, он ничего не делает.и выдает мне эту ошибку:

[WARN: 1] videoio (MSMF): OnReadSample () вызывается с состоянием ошибки: -1072875772 [WARN: 1] videoio (MSMF): asyncСбой вызова ReadSample () с состоянием ошибки: -1072875772 [WARN: 2] videoio (MSMF): невозможно захватить кадр.Ошибка: -1072875772

package application;

import java.io.ByteArrayInputStream;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.videoio.VideoCapture;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;

public class FXHelloCVController {

@FXML
private AnchorPane MainPane;

@FXML
private Button StartButton;

@FXML
private ImageView currentFrame;

@FXML
private Button StopButton;

private ScheduledExecutorService timer;
private VideoCapture capture = new VideoCapture(); 
private boolean cameraActive = false;
private static int cameraID = 0;

@FXML
void startCamera(ActionEvent event) {
    if(!this.cameraActive) {
        //if the camera is not active, open the camera

        cameraActive = true;

        this.capture.open(cameraID);

        if(this.capture.isOpened()) {
            //if the stream is available, run at 30fps (33 ms)

            Runnable frameGrabber = new Runnable(){

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Image imageToShow = grabFrame();
                    Platform.runLater(new Runnable() {
                        @Override public void run() { 
                        currentFrame.setImage(imageToShow); }
                    });
                }


            };

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

        }

    }

}

private Image grabFrame() {
    // TODO Auto-generated method stub
    Mat frame = new Mat();
    MatOfByte buffer = new MatOfByte();

    // check if the capture is open
    if (this.capture.isOpened()){
        try{
            // read the current frame
            this.capture.read(frame);

            // if the frame is not empty, process it
            if (!frame.empty()){

                Imgcodecs.imencode(".png", frame, buffer);
            }

        }catch(Exception e){
            // log the error
            System.err.println("Exception during the image elaboration: " + 
e);
        }
    }

    return new Image(new ByteArrayInputStream(buffer.toArray()));
}

@FXML
private void stopCamera(){
    cameraActive = false;
    if (this.timer!=null && !this.timer.isShutdown()){
        try{
            // stop the timer
            this.timer.awaitTermination(33, TimeUnit.MILLISECONDS);
            this.timer.shutdown();
            this.currentFrame.setImage(null);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }

Это прямо здесь, мой объект контроллера, может кто-нибудь помочь мне выяснить, что не так?

1 Ответ

0 голосов
/ 13 января 2019

Я получил эту же ошибку из-за аппаратного сбоя. Я на Windows, и он перестал работать после обновления. Может быть проблема с драйвером также. Я сильно подозреваю, что это произошло на уровне платформы. Я сменил веб-камеру, и все снова стало хорошо.

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