web-dev-qa-db-ja.com

OpenCVビデオファイルの解像度を変更する

私はOpenCV(2.4.8)でプログラムを作成しています。これは、ビデオファイルを読み取り、それらに対していくつかの計算を行う必要があります。これらの計算では、高解像度のフレームは必要ありません。解像度は640 * 360で問題ありません。

初期のテストでは、ウェブカメラを取り付けて使用しました:

VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);

これは画像を完全にサイズ変更しました。次のステップでは、ライブフィード(テストに使用したもの)ではなく、保存されたビデオ用のプログラムを使用します。ソースファイルパス(文字列)で '0'を変更すると、ファイルは読み込まれますが、解像度は1920 * 1080のままです。

私は何か間違ったことをしましたか? 「オンザフライ」で低解像度でビデオをロードする方法はありますか?

OpenCVのドキュメントを読みました。一部の設定には「カメラのみ」というラベルが付いていますが、この設定にはラベルが付いていません: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture

MacでOpenCVを使用していて、MacPortsでインストールしました。

詳細が必要な場合はお知らせください。

あなたの助けをありがとう

edit:cap.set(...)関数がブール値を返すことに気付いたので、それらを印刷してみました。 0を返します。これはもちろん、フレームのサイズが変更されていないことを確認します。理由はまだわかりません...

edit 2:したがって、一時的な解決策として、read(image)の後に次の行を使用します。

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);

そして、これはうまくいきます。しかし、これは本当に最適な解決策ではないと思います。

9
user3319803

を使用して

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);

read(image)がこの問題を解決するための最良の解決策のようです。したがって、合計(テスト)コードは次のようになります。

VideoCapture cap("path/to/file");
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);

誰かがより良い方法を知っているなら、私に知らせてください。

7
user3319803