2014-01-24 144 views
1

我是OpenCV的新手,我想展示我的網絡攝像頭在OpenCV中看到的東西。我正在使用C編碼語言。從網絡攝像頭捕捉圖像並顯示它 - OpenCV - Eclipse - Windows

我已經試過與此代碼:

#include <stdio.h> 

#include <cv.h> // Include the OpenCV library 
#include <highgui.h> // Include interfaces for video capturing 

int main() 
{ 
    cvNamedWindow("Window", CV_WINDOW_AUTOSIZE); 
    CvCapture* capture =cvCreateCameraCapture(-1); 
    if (!capture){ 
     printf("Error. Cannot capture."); 
    } 
    else{ 
     cvNamedWindow("Window", CV_WINDOW_AUTOSIZE); 

     while (1){ 
      IplImage* frame = cvQueryFrame(capture); 
      if(!frame){ 
       printf("Error. Cannot get the frame."); 
       break; 
      } 
     cvShowImage("Window",frame); 
     } 
     cvReleaseCapture(&capture); 
     cvDestroyWindow("Window"); 
    } 
    return 0; 
} 

我的攝像頭的指示燈亮起,但結果完全是一種灰色的窗口,沒有圖像。

你能幫我嗎?

回答

7

您需要

cvWaitKey(30); 

添加到while -loop結束。


cvWaitKey(x)/cv::waitKey(x)做了兩兩件事:

  1. 它等待X毫秒按鍵。如果在此期間按下了某個鍵,它將返回該鍵的ASCII碼。否則,它將返回-1
  2. 它處理任何窗口事件,例如使用cvNamedWindow()創建窗口,或使用cvShowImage()顯示圖像。

爲OpenCV的新手常犯的錯誤是調用cvShowImage()通過視頻幀的循環,不跟進每個戰平cvWaitKey(30)。在這種情況下,屏幕上不顯示任何內容,因爲highgui從來沒有時間處理來自cvShowImage()的繪圖請求。

有關更多信息,請參見What does OpenCV's cvWaitKey() function do?

相關問題