返り値の型 | メソッド名 | 説明 |
---|---|---|
コンストラクタ |
cv::VideoWriter(const String& filename , int fourcc , double fps , cv::Size frameSize , bool isColor = true ) |
コンストラクタ。 引数
|
bool | isOpened() | VideoWriterが正しく初期化されているか。 |
void | write(const cv::Mat& image ) | image をビデオフレームとしてストリームに書き込む。 |
VideoWriter& | operator<<(const cv::Mat& image ) | image をビデオフレームとしてストリームに書き込む。 |
void | release() | VideoWriter をcloseする。 |
OpenCVには複数のcv::Matから動画を作成する cv::VideoWriter が存在します。 cv::VideoWriter が対応している動画形式のうち、 いろいろなプラットホームで再生可能なのは ".avi" ファイルです。 ただし、書き込む画像 cv::Mat の形式は BGRA では駄目で、BGR に変換する必要があります。 また、解像度も変換して小さくする必要があります。
NtKinect kinect; cv::Size sz(640,480); cv::VideoWriter vw("videofile.avi", CV_FOURCC_MACRO('X','V','I','D'), 20.0, sz, true); if (! vw.isOpened()) throw runtime_error("cannot create videowriter"); cv:Mat img ; // 新しい cv::Mat を用意して while (1) { kinect.setRGB(); cv::resize(kinect.rgbImage, img, sz, 0, 0); // 解像度を 640x480 に変換する cv::cvtColor(kinect.rgbImage, img , CV_BGRA2BGR); // BGRAからBGRへ変換する vw << img; // vw.write(img) と同じ ... } vw.release(); |
cv::VideoWriter を用意します。
kinect.setRGB()メソッドを呼び出して kinect.rgbImage にRGB画像を設定します。 kinect.rgbImage の各画素は BGRA フォマットであるので、これを BGR フォーマットに変換してから cv::VideoWriter に write します。
日付と時刻をファイル名とする avi ファイルを生成します。
コメントアウトしてある部分を使うと mp4 ファイルを生成します。 が、私の手元ではここで生成した mp4 ファイルは、再生できるシステム Windows10 とできないシステム Windows8 がありました。aviファイルの方がサイズは大きくなりますが、問題は起こりにくいようです。
main.cpp |
|
"日付時刻.avi" が KinectV2_video/KinectV2/ の下にできています。
上記のzipファイルには必ずしも最新の NtKinect.h が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。