1

我正在尝试通过阅读 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++ 构建项目

4

2 回答 2

0

再看看你的代码:

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

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

检查文档并了解每种方法的作用和返回总是很好的。

这是受支持的网络摄像头列表,您的某些摄像头可能不受 OpenCV 支持。这可以解释为什么默认相机不起作用。

于 2012-10-02T14:38:51.867 回答
0

我按照这个优秀的指南安装 openCV 解决了这个问题:在 Ubuntu 上安装和配置 OpenCV 2.4.2 的综合指南

我怀疑我没有按照上述指南中的说明在 64 位平台上为构建 ffmpeg、v4l 设置正确的配置。无论如何,它终于奏效了!

于 2012-10-09T06:13:57.477 回答