2015-04-29 119 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