OpenNH

日常のひとこま(自分用のメモとかあれこれ)

OpenCV3.2のVideoWriterを使って動画作成

連続した画像から動画を作成するプログラムです。

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識


開発環境

・windows10
Visual Studio 2015
・OpenCV3.2
 

サンプルプログラム (C++)

サンプルでは↓のような300回カウントアップしていくだけの動画が作成されます。
各自で画像を読み込むコードを追加していただければ、好きな画像を読み込んで動画にすることができます。
f:id:FounderLeis:20181024173434g:plain
 
以下c++のサンプルコードです。

#include <opencv2/highgui.hpp>
#include <iostream>

#ifdef _DEBUG
// Debugモード
// OpecCVのライブラリの読み込み
#pragma comment(lib,"opencv_core320d.lib")
#pragma comment(lib,"opencv_highgui320d.lib")
#pragma comment(lib,"opencv_imgproc320d.lib")
#pragma comment(lib,"opencv_imgcodecs320d.lib")
#pragma comment(lib,"opencv_videoio320d.lib")
#else
// Releaseモード
// OpecCVのライブラリの読み込み
#pragma comment(lib,"opencv_core320.lib")
#pragma comment(lib,"opencv_highgui320.lib")
#pragma comment(lib,"opencv_imgproc320.lib")
#pragma comment(lib,"opencv_imgcodecs320.lib")
#pragma comment(lib,"opencv_videoio320.lib")
#endif

int main()
{
	// 幅320px-高さ240pxの画像を生成
	cv::Mat img(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 0));

	int    fourcc  = cv::VideoWriter::fourcc('X', 'V', 'I', 'D'); // コーデックを指定 
	double fps     = 30.0;   // 動画のフレームレートを指定
	bool   isColor = true;   // カラーで保存するか否か
	int    N       = 300;    // 動画にする画像の枚数を指定
	char   str[32];

	// 出力する動画ファイルの設定
	cv::VideoWriter writer("Sample_video.avi", fourcc, fps, img.size(), isColor);

	// 動画ファイルの初期化に成功したか判定
	if (!writer.isOpened()) {
		std::cout << "Can't VideoWriter open" << std::endl;
		return -1;
	}

	for (int i = 0; i < N; i++)
	{
		// 画像に「OpenCV "画像番号"」の文字列を描画
		cv::Mat dst = img.clone();
		sprintf(str, "%d", i + 1);
		cv::putText(dst, "OpenCV", cv::Point(80, 100), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 200, 0), 2, CV_AA);
		cv::putText(dst,      str, cv::Point(80, 150), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 200, 0), 2, CV_AA);

		// 入力画像を表示
		cv::imshow("image", dst);
		cv::waitKey(1);

		// 動画ファイルに出力
		writer << dst;
	}
	return -1;
}

 
 
 

注意点

実行する際につまづいた場合のために記載しておきます。

  1. VideoWriterで動画ファイルの初期化エラー(上記のソースコード内の”writer.isOpened()”でfalseが返されるとき)の解決方法

    • OpenCVに同梱されているffmpegのDLL("opencv_ffmpeg320_64.dll")にパスが通っていない可能性があります。
    • パスを通すか、カレントディレクトリ(プログラムの実行ファイル"***.exe"が存在するディレクトリ)にコピーしてください。
    • "opencv_ffmpeg320_64.dll”は、基本的には「...\build\x64\vc14\bin」直下に存在します。


  2. OpenCVのDLLファイルがないと怒れらるときの解決方法

    • プログラムで使用しているDLLファイルにパスが通っていない場合にそのような警告がでます。
    • パスを通すか、カレントディレクトリ(プログラムの実行ファイル"***.exe"が存在するディレクトリ)にコピーしてください。
    • 今回のおプログラムで使用しているOenCVのDLLは以下の5つです。