OpenCV

【OpenCV】アニメ風の動画にしてみる【Python】

完成品

今回しようした動画はこちらのPixabayのフリー動画です。

https://pixabay.com/ja/videos/山-高山-スイス-緑-風景-5773/

どうでしょうか、まるでアニメを見ているかのような感覚になったでしょうか。

今回は実写の動画を、画像処理を施してこちらのアニメ風の動画に変換していく方法を解説していきたいと思います。

動画を読み込み、保存する

動画を読み込む

まずは動画を読み込んでみましょう。

(main.py)

 

動画の読み込みは、「VideoCapture」というのを用い、動画のファイル名を引数に渡します。

動画を保存する

次に、動画を保存するプログラムを記述していきます。

(main.py)

 

動画の保存の際には、保存するときのフォーマット、そして「VideoWriter」の作成を行います。

また、「for」ループ内の処理についてですが、「VideoCapture」の「read」関数を使用することによってキャプチャ画像を取得しています。

つまり動画の1フレームです。

最後に「VideoWriter」の「write」関数で1フレーム分を保存し、動画の最後が終わるまで1フレームを保存し続けます。

そうすることで1本の動画が出来上がるのです。

もちろんこの時点ではまだ何も変化はありませんが、これで準備が整いました。

K-means法で減色する

まずはK-means法と呼ばれる手法で減色を施します。

減色というのはその名の通り、画像に使用できる色を少なくするというものです。

今回はRGBの3つの要素において、それぞれ16色のみの使用を許すことにします。

(main.py)

 

OpenCVの関数、「kmeans」関数というそのまんまの関数があるので使っていきましょう。

それぞれの引数の意味はあまり重要ではないのですが、減色の度合いを決める第二引数は重要です。ちなみにここに入った数字が、減色後の色の種類になります。

つまりここの数字を変動させることによって減色後の画像にも大きく影響を及ぼすので、あとで減色具合を変更したい場合は、この第二引数の値を変更してみましょう。

バイラテラルぼかしを適用する

次はバイラテラルぼかしというのを適用させます。

このバイラテラルぼかしを何度も行うと、油絵のような印象を持つようになります。

今回はこのバイラテラルぼかしを2度施すことにします。

(main.py)

 

バイラテラルぼかしの他にガウシアンぼかしというのも存在しますが、バイラテラルぼかしの方が輪郭がくっきり残される仕様になっているので、今回はバイラテラルぼかしを使用しました。

輪郭を描写

最後に輪郭を描写します。

先にグレースケール化した画像の輪郭をCanny法によって取得し、輪郭だけの画像を作成します。

この輪郭だけの画像は、輪郭だけが真っ白で他が真っ黒なので、白黒を反転させます。

そして作成した輪郭だけの画像を輪郭がまだ描写されていない画像にかぶせる形で輪郭を描写していきます。

(main.py)

 

これで完成です!

動画の書き出しに時間がかかると思いますが、気長に待ってみてください。

ABOUT ME
IT系だんし
プログラミングが大好きな人。 趣味でゲームやツール製作をしながら、プログラミング記事を書き続けています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です