web-dev-qa-db-ja.com

OpenCVでカメラのFPSを設定する方法CV_CAP_PROP_FPSは偽物です

カメラFPSの設定方法は?

CvSetCaptureProperty(cameraCapture、CV_CAP_PROP_FPS、30);の場合があります。 ?

しかし、それはHIGHGUIエラーを返します:V4L2:プロパティを取得できません(5)-無効な引数

Highgui/cap_v4l.cppには実装がないため

static int icvSetPropertyCAM_V4L( CvCaptureCAM_V4L* capture,
                                  int property_id, double value ){
    static int width = 0, height = 0;
    int retval;

    /* initialization */
    retval = 0;

    /* two subsequent calls setting WIDTH and HEIGHT will change
       the video size */
    /* the first one will return an error, though. */

    switch (property_id) {
    case CV_CAP_PROP_FRAME_WIDTH:
        width = cvRound(value);
        if(width !=0 && height != 0) {
            retval = icvSetVideoSize( capture, width, height);
            width = height = 0;
        }
        break;
    case CV_CAP_PROP_FRAME_HEIGHT:
        height = cvRound(value);
        if(width !=0 && height != 0) {
            retval = icvSetVideoSize( capture, width, height);
            width = height = 0;
        }
        break;
    case CV_CAP_PROP_BRIGHTNESS:
    case CV_CAP_PROP_CONTRAST:
    case CV_CAP_PROP_SATURATION:
    case CV_CAP_PROP_HUE:
    case CV_CAP_PROP_GAIN:
    case CV_CAP_PROP_EXPOSURE:
        retval = icvSetControl(capture, property_id, value);
        break;
    default:
        fprintf(stderr,
                "HIGHGUI ERROR: V4L: setting property #%d is not supported\n",
                property_id);
    }

    /* return the the status */
    return retval;
}

それを解決するには?

16
victor1234

pythonラッパーを使用すると、変数を次のように参照するのに役立ちました。

cap = cv2.VideoCapture(1)
cap.set(cv2.cv.CV_CAP_PROP_FPS, 60)

python 2.7.3とopencv 2.4.8を使用しています。

カメラはPS3アイです

17
elzbth

それがまだ有効かどうかはわかりませんが、1年半ほど前に、まさにその問題に遭遇しました。 OpenCVの開発者に連絡したところ、キャプチャのプロパティの一部を変更および変更するためのアクセスと機能はまだ実装されておらず、他のカメラは特定の種類のカメラでのみ機能することがわかりました。最後に libdc1394 (Linuxで動作)を調べ、libdc1394で取得したデータをOpenCVからIplImagesに変換する関数をいくつか作成しました。それはそれほど難しい仕事ではありませんでした。

6
Genís

CV_CAP_PROP_FPSは[〜#〜]ではありません[〜#〜]偽物です。 OpenCV githubリポジトリのcap_libv4l.cpp( 1 )を参照してください。重要なのは、OpenCVを構成するときに、v4lではなくlibv4lを使用することです。そのためには、cmakeを実行する前にlibv4l-devをインストールします

Sudo apt-get install libv4l-dev

CmakeでOpenCVを構成するときに、オプションWITH_LIBV4Lを有効にします。すべてがうまくいくと、構成ステータスで、以下のようなものが表示されます

V4L/V4L2:libv4l1(バージョン)/ libv4l2(バージョン)の使用

そして、OpenCVコードをビルドするときに、libv4l1/libv4l2/libv4lconvertとリンクする必要があります。

選択した解像度での任意のFPS値。ウェブカメラでサポートする必要はありません。サポートされている解像度/ fpsは、チーズのようなグラフィカルツールまたはlsusb( 2 )のようなコマンドで確認できます。

6
Kiran

opencv2.4ハンドブックを確認してください。ビデオキャプチャは以前よりもはるかに優れています。

-> set(CV_CAP_PROP_FPS、30);ほとんどの場合私にとってはうまくいきます。しかし、少し低い効率。

新しいopencv2.4が気に入らず、カメラを制御したい場合に備えて。こちらのビデオ入力ライブラリを確認してください。それは適切に機能し、ダイレクトショー機能を使用します。 http://www.aishack.in/2010/03/capturing-images-with-directx/ http://www.muonics.net/school/spring05/videoInput/

3
flankechen