OpenCV не может захватить изображение с веб-камеры isight - PullRequest
3 голосов
/ 11 января 2011

Я не могу захватить изображение с моей веб-камеры, используя следующий код OpenCV.

Код может отображать изображения из локального файла AVI или видеоустройства.Он отлично работает с файлом «test.avi».

Когда я использую веб-камеру по умолчанию (CvCapture * capture = cvCreateCameraCapture (0)), программа может определить размер изображения с веб-камеры, но просто невозможно отобразить изображение .

/ Я забыл упомянуть, что вижу, что iSight работает, потому что светодиодный индикатор включен /

Кто-нибудь сталкивался с такой же проблемой?

cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );

CvCapture* capture =cvCreateFileCapture( "C:\\test.avi" ) ;// display images from avi file, works well 
// CvCapture* capture =cvCreateCameraCapture(0); //display the frame(images) from default webcam not work 

assert( capture );
IplImage* image;

while(1) {
 image = cvQueryFrame( capture );
   if( !image ) break;

  cvShowImage( "Example2", image );

  char c = cvWaitKey(33);
  if( c == 27 ) break;
}

cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
  • opencv 2.2
  • Библиотека отладки * d.lib
  • WebCam isight
  • Macbook OS win732
  • VS2008

Ответы [ 5 ]

3 голосов
/ 14 ноября 2012

Я работаю над opencv 2.3 с Macbook pro в середине 2012 года, и у меня возникла эта проблема с камерой Isight.Каким-то образом мне удалось заставить его работать на opencv, просто настроив параметры Cvcapture и настройку ширины и высоты кадра:

CvCapture* capture = cvCaptureFromCAM(0);
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 500 );
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 600 );

Вы также можете изменить эти числа на желаемую ширину и высоту кадра.

1 голос
/ 15 октября 2013

Попробуйте это:

int main(int, char**) {
    VideoCapture cap(0); // open the default camera
    if (!cap.isOpened()) {  // check if we succeeded
        cout << "===couldn't open camera" << endl;
        return -1;
    }
    Mat edges, frame;
    frame = cv::Mat(10, 10, CV_8U);
    namedWindow("edges", 1);
    for (;;) {
        cap >> frame; // get a new frame from camera
        cout << "frame size: " << frame.cols << endl;
        if (frame.cols > 0 && frame.rows > 0) {
            imshow("edges", frame);
        }
        if (waitKey(30) >= 0)
            break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}
1 голос
/ 11 января 2011

Вы пробовали пример со страницы opencv ?

, а именно

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

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;

    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}

Работает на MacBook Pro для меня (хотя на OS X). Если это не сработает, будет полезно какое-то сообщение об ошибке.

0 голосов
/ 19 марта 2011

Последнее обновление!Проблема решена!

Это одна из ошибок OpenCV 2.2

Вот как это исправить:

http://dusijun.wordpress.com/2011/01/11/opencv-unable-to-capture-image-from-isight-webcam/

0 голосов
/ 13 января 2011

Почему бы вам не попробовать

capture=cvCaptureFromCam(0);

Я думаю, это может сработать.

Дайте мне знать о том, работает он или нет.

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