連番の画像ファイルを動画として扱う

知らなかった・・・

C++ (cv::VideoCapture)

cv::VideCaptureにて、Cのprintfの要領でこのようにファイル名を指定すると、連番の画像ファイルを動画ストリームとして扱えます。

以下の例では、001.png, 002.png, 003.png ... を順次1フレームとして読み込んでくれます。

cv::VideoCapture capture("%03d.png");

C (CvCapture)

C APIでも同様にできます (いつのバージョンから可能だったのかはわかりません)。

auto capture = cvCreateFileCapture("%03d.png");

使いどころ

複数枚画像が必要な処理で、かつ手持ちが静止画、というケースはそこそこ多いはずです。そんな時に手間取らずすぐに処理が行えます。

例えば、OpenCV超解像(cv::superres)は複数枚の画像を要します。入力を指定するインターフェースはVideoCaptureそっくりで、(GPUを無視すると)内部実装でもVideoCaptureが使われています。そこで、このようにすると連番静止画ファイルがそのまま使えそうです。

auto frameSource = cv::superres::createFrameSource_Video("%03d.png");

auto sr = cv::superres::createSuperResolution_BTVL1();
sr->setInput(frameSource);