OpenCV无法从isight网络摄像头捕获图像

使用以下OpenCV代码无法从网络摄像头捕捉图像。

该代码可以显示来自本地AVI文件或视频设备的图像。 它在“test.avi”文件中工作正常。

当我使用我的默认网络摄像头(CvCapture * capture = cvCreateCameraCapture(0))时,程序可以从网络摄像头检测到图像的大小,但无法显示图像

/我忘了提及我可以看到iSight正在工作,因为LED指示灯已打开/

任何人都遇到同样的问题?

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 win7 32
  • VS2008

  • 我正在使用Macbook Pro 2012年中期的opencv 2.3,并且我在使用Isight cam时遇到了这个问题。 不知何故,我设法通过简单地调整Cvcapture的参数并调整帧宽度和高度来使它在opencv上工作:

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

    您还可以将这些数字更改为所需的框架宽度和高度。


    你有没有尝试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上)。 如果它不起作用,某种错误信息会有帮助。


    尝试这个:

    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;
    }
    
    链接地址: http://www.djcxy.com/p/80971.html

    上一篇: OpenCV unable to capture image from isight webcam

    下一篇: OpenCV webcam capture problem