0

4つの同一のUSBWebカメラから画像を取得し、4つの異なる.aviファイルに保存することができました。

私はOpenCV2.4を使用しています。私のアプリケーションのソースコードは次のようにコンパイルされています。

g++ take_multicam_pictures.cpp -lcvaux -lopencv_highgui -lcv -lcxcore -o take_multicam_pictures

(Ubuntu 10.04の場合)。

問題は、各デバイスを選択して写真を撮る必要があり、新しいデバイスを開く前にデバイスを解放する必要があることです。このため、各Webカメラの1秒あたりのフレーム数は非常に少なくなっています(1フレーム/秒など)。

新しいキャプチャデバイスを開く前に各キャプチャデバイスを解放しないと、次のエラーが発生します。

VIDIOC_STREAMON: No space left on device

しかし、私はラップトップWebカメラと1つの外部Webカメラを同時に起動することができました。これがからの出力ですlsusb

$ lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 093a:2510 Pixart Imaging, Inc. Hama Optical Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 007: ID 0ac8:3450 Z-Star Microelectronics Corp. 
Bus 002 Device 006: ID 0ac8:3450 Z-Star Microelectronics Corp. 
Bus 002 Device 005: ID 0ac8:3450 Z-Star Microelectronics Corp. 
Bus 002 Device 004: ID 0ac8:3450 Z-Star Microelectronics Corp. 
Bus 002 Device 003: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 04f2:b071 Chicony Electronics Co., Ltd 2.0M UVC Webcam / CNF7129
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

これは、4つのWebカメラすべてから写真を取得し、それらを4つの異なるビデオファイルに保存するために使用したコードです。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>
#include <opencv/cv.h>

using namespace cv;
using namespace std; 
IplImage* frame1 = 0;

int record_cam(int dev, CvVideoWriter *writer)
{ 
    CvCapture* capture1 = cvCaptureFromCAM(dev);    // select device 

    cvGrabFrame(capture1);                          // capture a frame

    frame1 = cvRetrieveFrame(capture1);             // retrieve the captured frame

    cvWriteFrame(writer, frame1);                   // write captured           frame to .avi file  

    cvReleaseCapture(&capture1);                    // release the capture device
}

// A Simple Camera Capture Framework 
int main() 
{
    CvVideoWriter *writer1 = 0;         //create writer device that allows us to place frames in video file
    CvVideoWriter *writer2 = 0;
    CvVideoWriter *writer3 = 0;
    CvVideoWriter *writer4 = 0;
    int isColor = 1;                    //video properties
    int fps     = 3; 
    int frameW  = 640;                  //webcam dimension
    int frameH  = 480;

    writer1 = cvCreateVideoWriter("out1.avi",CV_FOURCC('F', 'L', 'V', '1'),fps,cvSize(frameW,frameH),isColor);
    writer2 = cvCreateVideoWriter("out2.avi",CV_FOURCC('F', 'L', 'V', '1'),fps,cvSize(frameW,frameH),isColor);
    writer3 = cvCreateVideoWriter("out3.avi",CV_FOURCC('F', 'L', 'V', '1'),fps,cvSize(frameW,frameH),isColor);
    writer4 = cvCreateVideoWriter("out4.avi",CV_FOURCC('F', 'L', 'V', '1'),fps,cvSize(frameW,frameH),isColor);

    int nFrames = 20, i = 0, key;       //capture 20 frames from each webcam and saves them in video files (out1.avi, out2.avi ...)

    for(i=0;i<nFrames;i++)
    {
        record_cam(1, writer1);         //capture frames from each web cam and writes them in different .avi files
        record_cam(2, writer2);
        record_cam(3, writer3);
        record_cam(4, writer4);
    }

    cvReleaseVideoWriter(&writer1);
    cvReleaseVideoWriter(&writer2);
    cvReleaseVideoWriter(&writer3);
    cvReleaseVideoWriter(&writer4);

    return 0;
}
4

2 に答える 2

0

表示されるエラー メッセージは、USB バスからのものです。これは基本的に、USB 接続のデータ負荷がすぎることを示しています。その理由は、OpenCV で Web カメラのストリームを開くためのデフォルト設定です。

最も簡単な回避策は、接続するカメラごとに個別の USB バスを使用することです。OpenCV (少なくとも 2.4.3.2) での実装は、多くの Web カメラのフレームレートを正しく指定するためのサポートを欠いているため、複数の Web カメラを使用できるようにするために、ソースにパッチを適用しました。

詳細については、OpenCV Q&A サイトの質問に対する私の回答を参照してください。

于 2013-03-08T16:07:53.427 に答える
0

GUI用のopenCVとTkinterを使用して、複数のWebカメラから写真をキャプチャするプログラムを作成しました。その後、作成した写真をムービーにプッシュできます。

ソースコードとexeファイルを見つけることができる私のgithubページへのリンク

于 2020-10-14T18:05:52.320 に答える