Comment puis-je fermer la caméra avec java et OpenCV?


Je suis nouveau dans le monde de StackOverflow et dans la programmation OpenCV. J'ai ouvert mon appareil photo avec du code Java et cela a fonctionné parce que la lumière de l'appareil photo était allumée, mais quand j'ai essayé de fermer l'appareil photo, j'ai échoué.

Code:

public class camera {

    public static void main(String[] args)  {
        System.loadLibrary("opencv_java244");
        VideoCapture camera = new VideoCapture(0);
        if (camera.isOpened())
             System.out.println("Camera is ready!");
        else {
             System.out.println("Camera Error!");
             return;
        }
        Mat newMat = new Mat();

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            //e.printStackTrace();
        }

        camera.read(newMat);
        Highgui.imwrite("testfile.jpg", newMat);

        camera.release();
        if (camera.isOpened()) {
            System.out.println("Camera is running!");
        }
        else {
            System.out.println("Camera closed!");
        }
    }
}

Résultat:

Camera is ready!
Camera closed!

J'ai vraiment eu la photo, mais la lumière était toujours allumée! PS Chaque fois que j'essaie d'ouvrir mon appareil photo, mon ordinateur ouvre un logiciel de lecteur nommé YouCam, et je dois le fermer manuellement pour libérer l'appareil photo.

Author: Choc13, 2013-11-08

1 answers

Essayez capture.récupérer() au lieu de capture.lire(). Voici un instantané qui fonctionne pour moi sans utiliser même Thread.dormir() VideoCapture capture = nouvelle VideoCapture(0);

    if (!capture.isOpened()) {
        imagePanel.add(new JLabel("Oops! Your camera is not working!"));
        return;
    } 
    Mat frame = new Mat();
    capture.retrieve(frame);
    frame = FaceDetector.detect(frame);
    BufferedImage image = GestureUtil.matToBufferedImage(frame);*/
    imagePanel.setImage(image);
    imagePanel.repaint();
    String window_name = "Capture - Face detection.jpg";
    Highgui.imwrite(window_name, frame);

    capture.release();

J'ai utilisé cela avec Swing. Cependant, vous pouvez ignorer le code swing. J'espère que cela aide

 0
Author: Bipul Sinha, 2013-11-14 14:02:23