web-dev-qa-db-ja.com

OpenCV:ビデオキャプチャの解像度を設定できません

Ubuntu 12.0464ビットでOpenCV2.4.5を使用しています。 Logitech C310Webカメラからの入力の解像度を設定できるようにしたいと思います。カメラは30fpsで最大1280x960をサポートし、guvcviewでこの解像度でビデオを見ることができます。しかし、OpenCVは常に640x480でのみビデオを取得します。

VideoCaptureキャップが作成された直後にcap.set(CV_CAP_PROP_FRAME_WIDTH、1280)およびcap.set(CV_CAP_PROP_FRAME_HEIGHT、960)を使用して解像度を変更しようとしても、効果はありません。すべてのフレームを取得する直前にそれらを設定しようとすると、プログラムがすぐにクラッシュします。この方法でも解像度を下げることはできません。 「HIGHGUIERROR:V4L/V4L2:VIDIOC_S_CROP」というエラーも表示されます。これは、VideoCaptureの作成時に1回、幅と高さを設定しようとしたときに1回表示されるため、関連している可能性があると思います(ただし、奇妙なことに、そのうちの1つだけを設定しようとした場合は表示されません)。

私はこの問題を抱えているのは私が最初ではないことを知っていますが、SOやインターネット上の他の場所(私が持っている多くのことの中で)を何度もグーグルして精査した後、まだ解決策を見つけていませんすでに役に立たないように試みたのは、このStackOverflowの質問に対する答えです: OpenCVでのカメラキャプチャ解像度の向上 )これはOpenCVのバグですか?もしそうなら、それはかなり明白なものです。

問題を示すコードの例を次に示します(OpenCVのビデオ表示コードの修正バージョンのみ)。

#include <cv.h>
#include <highgui.h>
using namespace cv;

int main(int argc, char** argv)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
            return -1;

    cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);

    Mat image;
    namedWindow("Video", CV_WINDOW_AUTOSIZE);

    while(1)
    {
            // cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
            // cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
            cap >> image;

            imshow("Video", image);

            if(waitKey(10) == 99 ) break;
    }
    return 
}

そのままでは、上記のように2つの「HIGHGUIERROR」が発生し、640x480の出力が得られます。 160x120は、私のカメラがv4l2-ctl --list-formats-extを実行することでサポートする解像度であることを知っています。 whileループでコメントアウトされた2行のコメントを解除すると、プログラムがすぐにクラッシュします。

これらは関連しているか、考えられる解決策がある可能性があります: http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/http:// answers .opencv.org/question/30062/error-setting-resolution-of-video-capture-device /

12
erobertc

これはOpenCV2.4(2.4.12を含む)のv4l「バージョン」(ビルド)のバグですが、バグはlibv4lバージョン。 OpenCV 3.1.0の場合、v4lバージョンとlibv4lバージョンのどちらにもバグはありません。

(エラーエラーメッセージHIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROPは、v4lバージョンを使用していることを示します。メッセージはcap_v4l.cppにあります。 code を参照してください。ただし、cap_libv4l.cppにはありません。)

OpenCV 2.4のv4lバージョンを640x480以外のfixed解像度で動作させるための回避策は、DEFAULT_V4L_WIDTHとの値を変更しています。 modules/highgui/src/cap_v4l.cppのDEFAULT_V4L_HEIGHTとOpenCVの再構築、これに対する称賛 answer

代わりにlibv4lバージョンをビルドしたい場合は、libv4l-devをインストールして、OpenCVを再構築するだけです。 WITH_LIBV4Lはデフォルトで有効になっています。そうでない場合は、cmakeコマンドに次のものが含まれている必要があります

-D WITH_LIBV4L=ON

Libv4lビルドのcmake出力(またはversion_string.tmp)には、次のようなものが含まれています。

  Video I/O:
    ...
    V4L/V4L2:   Using libv4l1 (ver 0.8.6) / libv4l2 (ver 0.8.6)

(v4lビルドの場合、それはV4L/V4L2: NO/YESです。)

5
Ulrich Stern

OpenCV3.2.0に対するUlrichの包括的な回答に基づいてRaspberryPi3でJavaを使用してビルドするCMAKEオプションを追加したかっただけです。/buildフォルダーをOpenCVCMakeListと同じフォルダーに作成します。 txtを実行し、新しい/ buildフォルダーに対して次のスクリプトを実行します。

Sudo cmake -D CMAKE_BUILD_TYPE = RELEASE -D WITH_OPENCL = OFF -D BUILD_PERF_TESTS = OFF -D BUILD_SHARED_LIBS = OFF -D Java_INCLUDE_PATH = $ Java_HOME/include -D Java_AWT_LIBRARY = $ Java_HOME/jre/lib/arm/libawt $ Java_HOME/jre/lib/arm/server/libjvm.so -D CMAKE_INSTALL_PREFIX =/usr/local -D BUILD_TESTS = OFF -D WITH_MATLAB = OFF -D WITH_CUFFT = OFF -D WITH_CUDA = OFF -D WITH_CUBLAS = OFF -D WITH_GTK = OFF -D WITH_WEBP = OFF -D BUILD_opencv_apps = OFF -D BUILD_PACKAGE = OFF -D WITH_LIBV4L = ON ..

0
Austin

V4l2-ctlを使用して、以下のようにキャプチャされたビデオのフレームサイズを設定できます。

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1

あなたはこれでより多くの情報を見つけることができます リンク

0
Ömer Taban