概要
どうだろうか。
これを観た熱心なゴリラは、こう考えるだろう。
これを観た熱心なゴリラは、こう考えるだろう。
かんたんじゃん
解説
1つのフレームの中に、順々に遅れたフレームが存在している。
下から3ピクセルは今のフレーム
その上の3ピクセルは1フレーム前のフレーム
さらにその上の3ピクセルは2フレーム前のフレーム
……
実装
int main() {
string filename = "video/a.mp4";
VideoCapture capture;
//// カメラから入力する
// capture.open(0);
// ファイルから入力する
capture.open(filename);
Mat capturedImage;
// 最初のフレームを取得
capture >> capturedImage;
// フレームの大きさを調べる
int width = capturedImage.cols;
int height = capturedImage.rows;
cout << width << "x" << height << endl;
// スリットの高さ
int slitHeight = 3;
// 画面をいくつのスリットに分割するか
int slitCount = height / slitHeight;
// スリットごとの画像
vector<Mat> slitImages;
// メインループ
while (true) {
// 次のフレームを取得
capture >> capturedImage;
if (capturedImage.empty()) break;
// スリットの画像をずらす
slitImages.push_back(capturedImage.clone());
for (int c = 0; c < slitImages.size()-1; c++)
slitImages[c] = slitImages[c+1];
if (slitImages.size() > slitCount) {
slitImages.pop_back();
}
// スリットごとに画像をコピー
for (int c = 0; c < slitImages.size(); c++) {
Rect slit(0, slitHeight*c, width, slitHeight);
Mat(slitImages[c], slit).copyTo(Mat(capturedImage, slit));
}
// 表示
imshow("out", capturedImage);
// なにかキーが押されたら終了
if (waitKey(10) != -1) break;
}
return 0;
}
出力結果
動画はNHKのを使う。オリジナルはこれだ。
んで、変換後はこれだ。
0 件のコメント:
コメントを投稿