23

OpenCV で Logitech C920 からビデオ ストリームをキャプチャしようとしています。Labview を使用すると、30fps 1080p で MJPG ストリームにアクセスできます。opencv では、5fps または 640x480 に制限されています。

カメラ設定に関連するコードは次のとおりです。

this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));

これらはすべて 1 を返しますが、YUY2 ストリームに対応する 1080p の 5fps ストリームを取得します。
次の行を追加すると:

this->camRef.set(CV_CAP_PROP_FPS, 30);

これは 0 を返します。640x480 で 30 fps のストリームを取得します。私には、MJPG 設定が受け入れられないように見えますが、何をすべきか、またはそれを修正する方法がわかりません。

編集: 以下はプログラムをクラッシュさせます。

 this->camRef.read(this->image);
 std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC)                            << std::endl;
 std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width)         << std::endl;
 std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height)       << std::endl;
 std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
 std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC)                            << std::endl;

次に、実行コードには次のものがあります。

void camera::run()
{
    while(true)
    {
        if(this->camRef.read(this->image) == 0)
        {
           if(this->capture)
            {
                cv::imwrite(fileName,this->image);
                this->count++;
            }
        }
        msleep(15);
    }
}

EDIT2: 解決策は、カメラの高さと幅を設定する前に、fourCC コーデックを設定することです。

4

3 に答える 3

14

投稿の作成者は既に解決策を見つけましたが、回答として追加しなかったため、ここに解決策を記載します。

必要な解像度を設定する前に、コーデックを設定する必要があります。

this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));
this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
于 2016-06-10T07:31:48.590 に答える
3

Logitech c922 での作業には、次のものが必要です。

capture.open(CV_CAP_DSHOW);
capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));
capture.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
于 2018-08-19T15:46:03.690 に答える