2010-07-24 7 views
1

Salut, je suis en train de détecter web cam dans OpenCV en utilisant le code suivant, je reçois écran noir vide si ma web cam est attaché à mon PC via USBImpossible de détecter web cam dans OpenCV

Ma webcam utilise * * iCatch (VI) Caméra PC ** pilote & J'utilise OpenCV 2.1 avec VS 2008

#include "cv.h" 
#include "highgui.h" 

int main(int argc, char** argv) { 
cvNamedWindow("cam", CV_WINDOW_AUTOSIZE); 
CvCapture* capture; 
if (argc==1) { 
    capture = cvCreateCameraCapture(0); 
} else { 
    capture = cvCreateFileCapture(argv[1]); 
} 
assert(capture != NULL); 

IplImage* frame; 
while(1) { 
    frame = cvQueryFrame(capture); 
    if(!frame) break; 
    cvShowImage("cam", frame); 
    char c = cvWaitKey(10); 
    if(c == 27) break; 
} 
cvReleaseCapture(&capture); 
cvDestroyWindow("cam"); 
} 

Répondre

2

Ok, d'abord ... fait votre travail de webcam avec d'autres applications webcam?

Votre code est un peu foiré! Vous créez une fenêtre nommée Example2_9, mais vous essayez de dessiner avec cvShowImage() dans une autre fenêtre (nommée cam) qui n'existe pas! Répare ça! Remplacez les occurrences came par Example2_9.

Si cela ne résout pas le problème, je remplacerais probablement le début de main() par ceci:

int main(int argc, char** argv) 
{ 
    cvNamedWindow("Example2_9", CV_WINDOW_AUTOSIZE); 
    CvCapture* capture; 

    capture = cvCreateCameraCapture(-1); //yes, if 0 doesn't work try with -1 
    assert(capture != NULL); 

code Vous manque de contrôle d'erreur dans plusieurs endroits, soyez prudent. Une des fonctions pourrait renvoyer une erreur et vous ne saurez jamais jusqu'à ce que vous fassiez la vérification appropriée.

Vous pouvez également trouver un tas d'autres exemples OpenCV sur Google qui appelle cvCaptureFromCAM() au lieu de cvCreateCameraCapture(). Si les suggestions ci-dessus ne fonctionnent pas, essayez-le! Une autre chose, sur mon Macbook Pro, je dois utiliser cvCaptureFromCAM (0) pour que l'application fonctionne. Sous Linux, j'utilise toujours cvCaptureFromCAM (-1).

+0

Eh bien, je suis nouveau à OpenCV, donc je ne sais pas où prendre soin des erreurs, mais j'ai essayé cvCaptureFromCAM (0), cvCaptureFromCAM (-1) , cvCreateCameraCapture (0), cvCreateCameraCapture (-1) rien ne fonctionne pour moi – Hunt

+0

Je viens d'ajouter ces lignes à mon code et ça marche maintenant if (capture!= NULL) printf ("Travailler"); \t sinon \t printf ("Ne fonctionne pas"); – Hunt

+0

Super! N'oubliez pas de voter UP sur ma réponse si cela vous a aidé, ou même de l'accepter comme réponse officielle à votre question afin qu'elle puisse aider les autres à l'avenir. Je vous remercie! – karlphillip

0

J'utilise habituellement

capture = cvCreateCameraCapture(-1); 

pour laisser OpenCV détecter automatiquement une caméra appropriée.

+0

J'ai essayé d'utiliser -1 mais le même problème se produit – Hunt

1

je fait face à la même question d'essayer l'exemple du LearningOpenCV 2-9 du livre. Je code avec VS13 Ultimate sur Win7-Prof dans une machine virtuelle; La WebCam du PC hôte est un BisonCam, NB Pro; J'ai essayé différentes variantes de la cvCreateCameraCapture, qui retournait toujours NULL; J'ai même testé la WebCam avec le VLC-Player, car je ne savais pas si cela fonctionnait grâce à la VM.

Ma solution est d'utiliser la classe VideoCapture, qui stocke l'image capturée dans la classe Mat, donc une convertion à la structure IplImage est nécessaire. (trouvé here)

solution est mon:

#include "opencv\cv.h" 
#include "opencv\highgui.h" 
#include <iostream> 
#include <string.h> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

using namespace cv; 
... 
void Run_with_WebCAM(){ 
    std::string WindowName = "WebCam_Example"; 
    VideoCapture webcam; 
    webcam.open(0); 
    Mat m_frame; 
    if (webcam.isOpened()){ 
     // create a window 
     cvNamedWindow(WindowName.c_str(), CV_WINDOW_AUTOSIZE); 
     IplImage* frame; 
     while (1) { 
      // update frame and display it: 
      webcam >> m_frame; 

      // convert captured frame to a IplImage 
      frame = new IplImage(m_frame); 
      if (!frame) break; 
      cvShowImage(WindowName.c_str(), frame); 

      // Do some processing... 

      delete frame; 

      // some abort condition... 
     } 
     // release memory and destroy all windows 
     cvDestroyWindow(WindowName.c_str()); 
     ... 
    } 
}