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");
}
}
Cerca di codificare un'immagine come .png. –
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". –
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);". –