Невозможно обнаружить веб-камеру в OpenCV - PullRequest
1 голос
/ 24 июля 2010

Привет. Я пытаюсь определить веб-камеру в opencv, используя следующий код. Я получаю пустой черный экран, хотя моя веб-камера подключена к ПК через USB

.Драйвер PC Camera ** и я использую OpenCV 2.1 с 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" );
}

Ответы [ 4 ]

2 голосов
/ 24 июля 2010

Хорошо, сначала ... ваша веб-камера работает с другими приложениями веб-камеры?

Ваш код немного запутался! Вы создаете окно с именем Example2_9, но вы пытаетесь нарисовать с помощью cvShowImage () в другое окно (с именем cam ), которое не существует! Исправь это! Заменить вхождения cam на Example2_9.

Если это не решит проблему, я бы, вероятно, заменил начало main () на это:

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 );

В вашем коде отсутствует проверка ошибок в нескольких местах, будьте осторожны. Одной из функций может быть возвращение ошибки, и вы никогда не узнаете, пока не выполните соответствующую проверку.

Вы также можете найти множество других примеров OpenCV в Google, которые вызывают cvCaptureFromCAM () вместо cvCreateCameraCapture (). Если приведенные выше предложения не работают, попробуйте!

Еще одна вещь, на моем Macbook Pro я должен использовать cvCaptureFromCAM (0) для работы приложения. В Linux я всегда использую cvCaptureFromCAM (-1).

1 голос
/ 11 ноября 2014

Я столкнулся с той же проблемой, пробуя пример 2-9 из книги LearningOpenCV.

Я программирую с VS13 Ultimate на Win7-Prof в виртуальной машине;Веб-камера с хост-компьютера представляет собой BisonCam, NB Pro;Я пробовал разные варианты cvCreateCameraCapture, которые всегда возвращали NULL;Я даже успешно протестировал веб-камеру с VLC-Player, потому что я не был уверен, работает ли она из-за виртуальной машины.

Мое решение - использовать класс VideoCapture , который хранит захваченное изображение в классе Mat , поэтому необходимо преобразование в структуру IplImage.(найдено здесь )

Мое решение:

#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());
       ...
    }
 }
0 голосов
/ 25 июля 2010

Возможно, OpenCV не поддерживает вашу веб-камеру. Кажется, вы работаете в системе Windows, поэтому вы можете попробовать использовать библиотеку videoInput, чтобы получить доступ к вашей веб-камере через DirectX.

Подробнее: http://aishack.in/tutorials/capturing-images-with-directx/

0 голосов
/ 24 июля 2010

Я обычно использую

capture = cvCreateCameraCapture( -1 );

, чтобы позволить OpenCV автоматически определять правильную камеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...