VideoCapture dosnt从网络摄像头openCV2.4.0 linux读取

时间:2012-10-02 06:22:18

标签: c++ linux opencv webcam

我正在尝试通过在openCV中读取网络摄像头流来制作一些计算机视频。我尝试过使用内部网络摄像头和外部USB摄像头,它们都可以很好地使用camorama,streamer等程序。

我的部分代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include "pic_manipulation.hpp"
#include "colorDetector.h"
#include <time.h>
using namespace std;


int main ( int argc, char **argv ){
    string file="../test.avi";
    cv::VideoCapture capture(0);//les video
    if(!capture.isOpened()){
        cout <<"could not read file"<<endl;
        return -1;
    }   
    double rate=capture.get(CV_CAP_PROP_FPS);
    bool stop(false);
    cv::Mat frame;
    cv::namedWindow("Extract frame");
    int delay=1000/rate;
    while(!stop){
        if(!capture.read(frame))break;
        cv::imshow("Extract frame", frame);
        sleep(delay/1000);
        if(cv::waitKey(delay)>=0){
            cout<<"stop"<<endl;
            stop=true;
            capture.release();
        }
        cout<< "one loop finished"<<endl;
    }
    return 0;
}    

当我编译并运行程序时,我没有得到任何错误或警告,它只返回if(!capture.isOpened())(或者如果我跳过isOpened它返回下一个if(...)) 。 它完全没有问题地读取视频文件。任何人都知道我的opencv安装是否有问题,或者是否是导致问题的linux网络摄像头设置? 我正在使用linux mint并使用cmake / g ++构建项目

2 个答案:

答案 0 :(得分:0)

再看看你的代码:

cv::VideoCapture capture(0);      // open the default camera
if(!capture.isOpened())           // check if it succeeded
{
  //...
}  

isOpened()对索引0失败的事实告诉您它无法打开默认摄像头。由于您有其他相机连接到您的计算机,您也可以尝试传递123,...

check the docs总是好的,并了解这些方法的作用和回归。

Here is a list of supported webcams,OpenCV可能不支持您的某些相机。这可以解释为什么默认相机不起作用。

答案 1 :(得分:0)

我按照这个出色的指南安装openCV解决了这个问题:A Comprehensive Guide to Installing and Configuring OpenCV 2.4.2 on Ubuntu

我怀疑我没有按照上面指南中的规定在64位平台上设置正确的配置来构建ffmpeg,v4l。无论如何,它终于有效了!