1

1)OpenCV(更新されたKubuntu Linux)で2台のlogitechc310カメラを処理しているときにこのエラーが発生します

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でも、2台のカメラを処理する場合にのみ発生します。私はまだコードの解像度を320x240に下げようとしましたが、これも機能しませんでした。

3)ここや他のサイトで他の多くの投稿を検索しました。それは私に利用可能な十分なUSBカム帯域幅がないことを教えてくれました。だから私は1つのカムを前面のUSBに接続し、もう1つを背面に接続しようとしましたが、これも失敗しました:(

私の質問は:

このbandwith/memoryの問題を解決し、opencv 2.4.2で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;
}
4

1 に答える 1

0

ウェブカメラがusbバスで利用可能なすべての帯域幅を占有するため、PCIusb拡張カードを使用すると同じ問題が解決しました。pci usb拡張カードを使用すると、2番目のWebカメラを接続できる2番目のusbバスが提供されます

于 2013-01-19T11:50:20.127 に答える