OpenCV - Le cadre de la webcam ne fonctionne pas sur macbook en Java


Je viens de parcourir ma première installation d'opencv sur mon mac air, et j'ai essayé d'obtenir une entrée de la caméra intégrée à l'écran. Pour autant que je sache, les bibliothèques s'exécutent correctement dans Eclipse, car je ne reçois plus d'erreurs massives chaque fois que j'essaie d'appeler l'une des méthodes. Cependant, ce qui se passe maintenant est un problème avec la webcam, qui semble être correctement créée avec 0 passé au constructeur (rien d'autre de 1-50 ne renvoie quoi que ce soit, et -1 I croire est la valeur par défaut). Mais quand j'essaie de l'utiliser pour récupérer un cadre, le tapis est toujours vide.

Pour autant que je sache, il semble que je puisse accéder à la caméra, mais il y a une sorte de déconnexion entre le code et la possibilité d'activer réellement la caméra pour prendre des vidéos. Si cela compte, la lumière qui montre la caméra active pour la plupart des programmes est toujours restée inactive.

Le code correspondant est affiché ci-dessous. J'apprécierais grandement toute perspicacité que vous pourriez ont ou des exemples de code java pour obtenir une image de la webcam pour une utilisation dans un environnement graphique java. Merci!

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    VideoCapture camera = new VideoCapture(0);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }


    //camera.open(0); //Useless
    if(!camera.isOpened()){
        System.out.println("Camera broken");
    }
    else{
        System.out.println("Camera OK!");
    }

    Mat frame = new Mat();

    camera.read(frame);

    System.out.println("width:" + frame.width());

    Highgui.imwrite("myframe.png", frame);

La sortie est:

Camera OK!
width:0
libpng warning: Image width is zero in IHDR
libpng warning: Image height is zero in IHDR
libpng error: Invalid IHDR data
Cleaned up camera.
Author: Vadim Kotov, 2013-07-21

1 answers

Cela fait un moment que cette question a été posée, mais comme j'avais essentiellement le même problème, je vais poster une solution (trouvée ici) (c'est une solution assez simple en fait pour un problème stupide):

La caméra a besoin de temps pour s'initialiser (je ne sais pas quels sont les détails matériels sanglants, mais voilà). Pour le réparer, j'ai simplement ajouté du fil.sommeil(1000), et il a commencé à travailler. Une solution légèrement meilleure peut être d'envelopper cela dans une boucle qui réessaie toutes les 1000 ms environ jusqu'à ce que le tapis retourné soit ce n'est pas vide.

J'espère que quelqu'un en profite: -)

EDIT: J'aurais dû lire votre code en premier. Idiot moi, toutes mes excuses. Le problème semblait très similaire au mien, donc j'ai supposé que c'était le même.

 0
Author: Ibby, 2017-05-23 12:19:11