2015-04-29 162 views
1

由於一些奇怪的原因,程序無法從網絡攝像頭讀取幀。它雖然成功地打開了網絡攝像機。我已經找到了這個問題,我發現了各種解決方案,他們都沒有和我一起工作。這是我的代碼無法從網絡攝像頭讀取

#include <iostream> 
#include <cstdlib> 
#include "opencv2/core/core.hpp" 
#include "opencv2/highgui/highgui.hpp" 

int main() 
{ 
    // access the default webcam 
    cv::VideoCapture cap(0); 

    // Double check the webcam before start reading. 
    if (!cap.isOpened()){ 
     std::cerr << "Cannot open the webcam " << std::endl; 
     exit (EXIT_FAILURE); 
    } 

    cv::Mat frame; 
    cv::namedWindow("webcam",CV_WINDOW_AUTOSIZE); 

    while (true){ 

     // acquire frame 
     cap >> frame; 

     // Safety checking 
     if (!frame.data){ 
     std::cerr << "Cannot acquire frame from the webcam " << std::endl; 
      break; 
     } 

     cv::imshow("webcam", frame); 

     if (cv::waitKey(30) == 27){ 
     std::cout << "esc key is pressed" << std::endl; 
     break; 
     } 
    } 

    return 0; 
} 

這是終止程序之前的窗口。

enter image description here

我使用的是Windows 7(戴爾筆記本電腦)。該代碼是在與.dlls鏈接的發佈模式下編譯的。 OpenCV版本是2.4.10。 在條命令提示符

cl /EHsc main.cpp /Fetest.exe /I D:\CPP_Libraries\opencv_2.4.10\build\include /link /LIBPATH:D:\CPP_Libraries\opencv_2.4.10\build\x86\vc12\lib opencv_core2410.lib opencv_highgui2410.lib 

我已經運行在Ubuntu相同的代碼(雙啓動沿着窗戶7),它開啓了攝像頭,但不通過HighGUI,我得到這個錯誤就

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP 
init done 
opengl support available 

任何建議這件事。經過一些diggings,some ppl指出cmake,因此我需要重新安裝opencv並正確配置cmake。有沒有解決這個問題,而不重新安裝庫,如果這真的是Ubuntu和Windows的問題?謝謝

回答

-1

請按照適用於VideoCapture的opencv文檔:VideoCapture。它提供了一個簡單的C++視頻捕捉示例。

與您的代碼有一些區別,在Mat frame是在循環內部。

+0

這是如何解決我的問題? – CroCo

+0

那麼,該代碼的作品,所以如果它不在您的計算機上它是一個有缺陷的安裝,或您的相機與opencv不兼容。 您也可以嘗試其他相機索引:'VideoCapture cap(1)'。由於某些原因,您的相機可能沒有被默認設置 – Soma