2013-04-05 3 views
5

Sono nuovo nel mondo di Stackoverflow e nella programmazione OpenCV. Ho realizzato alcuni progetti con OpenCV Bindings per Java (i funzionari di opencv.org, non JavaCV), come il riconoscimento degli oggetti tramite le funzioni ORB e SURF, lavorando con le immagini. Tutto ok. Ora sto passando al riconoscimento degli oggetti nei flussi video. Voglio prendere il flusso dalla webcam e applicare il riconoscimento degli oggetti. Non sono un guru Java, quindi ho trovato in OpenCV la classe VideoCapture, ma non sono in grado di ottenere immagini dalla fotocamera.OpenCV 2.4.4 Java - Grab Webcam picture/stream (OSX)

Sto eseguendo il mio progetto in Eclipse con associazioni OpenCV 2.4.4, in OSX Mountain Lion.

Il risultato nella console:

Hello, OpenCV 
Camera OK? 
Frame Obtained 
Captured Frame Width 0 
Invalid memory access of location 0x7fae00000000 rip=0x7fff8b4c5263 

Il codice:

import org.opencv.core.Mat; 
import org.opencv.highgui.Highgui; 
import org.opencv.highgui.VideoCapture; 

public class Webcam { 

    public static void main (String args[]){ 

    System.out.println("Hello, OpenCV"); 
    // Load the native library. 
    System.loadLibrary("opencv_java244"); 

    VideoCapture camera = new VideoCapture(0); 
    camera.open(0); //Useless 
    if(!camera.isOpened()){ 
     System.out.println("Camera Error"); 
    } 
    else{ 
     System.out.println("Camera OK?"); 
    } 

    Mat frame = new Mat(); 

    //camera.grab(); 
    //System.out.println("Frame Grabbed"); 
    //camera.retrieve(frame); 
    //System.out.println("Frame Decoded"); 

    camera.read(frame); 
    System.out.println("Frame Obtained"); 

    /* No difference 
    camera.release(); 
    */ 

    System.out.println("Captured Frame Width " + frame.width()); 

    Highgui.imwrite("camera.jpg", frame); 
    System.out.println("OK"); 
    } 
} 
+0

Cerca di codificare un'immagine come .png. –

+0

Il problema non è nel formato dell'immagine. La console dice che la larghezza dell'immagine è 0. Cambiare il formato dell'immagine in PNG cambia l'ultima riga nella console in: "avviso di libpng: La larghezza dell'immagine è zero in IHDR"; "avviso libpng: l'altezza dell'immagine è zero in IHDR"; "errore libpng: dati IHDR non validi". –

+1

RISOLTO. Il problema era semplicemente che la fotocamera aveva bisogno di tempo per inizializzarsi. Ho aggiunto "Thread.sleep (1000);" dopo "VideoCapture camera = new VideoCapture (0);". –

risposta

7

Il problema era semplicemente quella telecamera hanno bisogno di tempo per l'inizializzazione. Ho aggiunto

Thread.sleep(1000); 

dopo

VideoCapture camera = new VideoCapture(0); 
3

Ho provato questo codice in MacOS, e ho trovato un altro errore.

System.loadLibrary("opencv_java244"); 

Sopra linea restituisce questo errore

java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.VideoCapture_2(I)J 

Per superarla, ho sostituito quella linea con questo

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

e il codice funziona!

Sto utilizzando OpenCV 2.4.8, compreso come la libreria utenti nel mio progetto Eclipse

+0

Per gli altri là fuori: ho avuto alcuni problemi con UnsatisfiedLinkError troppo. Ho perso il passaggio per impostare il 'Native library location' della libreria utente su '/lib'. Spero che questo aiuti qualcuno. – Christof

3

Sostituire
System.loadLibrary("opencv_java244");
con
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);