OpenCV多相机处理问题

时间:2012-11-04 05:41:26

标签: c++ linux opencv ffmpeg kubuntu

1)使用OpenCV(更新的Kubuntu Linux)处理两台Logitech c310相机时出现此错误

VIDIOC_STREAMON:设备上没有剩余空间

整个错误日志如下

**IDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument**
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
**libv4l2: error turning on stream: No space left on device**
**VIDIOC_STREAMON: No space left on device**
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /home/rjdp/Computer_Vision/0_Installers/OpenCV-2.4.2/modules/core/src/array.cpp, line 2482
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/rjdp/Computer_Vision/0_Installers/OpenCV-2.4.2/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat

2)仅在处理两个摄像机时才会发生,即使在默认的低分辨率640x480。我仍然试图将代码中的分辨率降低到320x240,这也没有用。

3)我在这里搜索了很多其他帖子&在其他网站上。这告诉我没有足够的USB凸轮带宽可用。所以我试着在USB和USB前插一个凸轮。背面的一个也失败了:(

我的问题是:

  

是否有可能解决这个带宽/内存和放大器的问题?跑两个或   opencv上的更多摄像头2.4.2 ?? OpenCV使用 ffmpeg 来处理I / O所以我可以通过一些ffmpeg命令告诉我的摄像机硬件使用压缩的MPEG获取输入流模式而不是消耗正常模式的带宽。

代码如下:

#include "opencv2/opencv.hpp"
#include <stdio.h>
using namespace cv;

int main(int, char**)
{
    VideoCapture cap01(0); // open the default camera
    cap01.set(CV_CAP_PROP_FRAME_WIDTH,320);
    cap01.set(CV_CAP_PROP_FRAME_HEIGHT,240);
    //sleep(1);
    if(!cap01.isOpened())  // check if we succeeded
        return -1;
    namedWindow("Camera01",1);

    VideoCapture cap02(1); // open the default camera
    cap02.set(CV_CAP_PROP_FRAME_WIDTH,320);
    cap02.set(CV_CAP_PROP_FRAME_HEIGHT,240);
   if(!cap02.isOpened())  // check if we succeeded
        return -1;
    namedWindow("Camera02",1);

    for(;;)
    {
        Mat frame, frame_1;
        //Mat frame02;
        cap02 >> frame;
        imshow("Camera01", frame);
        if(waitKey(30) >= 0) break;
        Mat frame_1;
        cap02 >> frame_1; 
        imshow("Camera02", frame_1);
        if(waitKey(30) >= 0) break;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

使用PCI usb扩展卡为我解决了同样的问题,因为网络摄像头控制了usb总线上所有可用的带宽。使用pci usb扩展卡为您提供第二个USB总线,您可以连接第二个网络摄像头