私は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);
そして、これはうまくいきます。しかし、これは本当に最適な解決策ではないと思います。
を使用して
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);
誰かがより良い方法を知っているなら、私に知らせてください。