【Python/OpenCV】動画のアニメ絵化アプリの作成

この記事では、Python版OpenCVで動画をアニメ絵風に加工する方法をソースコード付きで解説します。

動画のアニメ絵化

Python版OpenCVの空間フィルタ処理などを組み合わせると画像をアニメ風に加工できます。
今回はこれを応用して、動画ファイルを読み込んでアニメ絵風に加工してみます。

参考記事
1 【Python/OpenCV】写真・画像をアニメ風に加工
2

ソースコード(Python3+OpenCV3)

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import cv2
import numpy as np

def anime_filter(img):
    # グレースケール変換
    gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)

    # ぼかしでノイズ低減
    edge = cv2.blur(gray, (3, 3))

    # Cannyアルゴリズムで輪郭抽出
    edge = cv2.Canny(edge, 50, 150, apertureSize=3) 

    # 輪郭画像をRGB色空間に変換
    edge = cv2.cvtColor(edge, cv2.COLOR_GRAY2BGR)

    # 画像の領域分割
    img = cv2.pyrMeanShiftFiltering(img, 5, 20)
    
    # 差分を返す
    return cv2.subtract(img, edge)


def main():

    # 動画の読み込み
    cap = cv2.VideoCapture("input.mp4")
    
    # スクリーントーン画像の読み込み
    screen = cv2.imread("screen.jpg")

    # 動画終了まで繰り返し
    while(cap.isOpened()):
        # フレームを取得
        ret, frame = cap.read()

        # 画像のアニメ絵化
        anime = anime_filter(frame)

        # フレームを表示
        cv2.imshow("Input", frame)
        cv2.imshow("Anime", anime)

        # qキーが押されたら途中終了
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

実行結果

■入力(カメラ映像)と出力(漫画化後)

関連記事
PythonでOpenCV入門 サンプル集
【Python】画像処理プログラミング入門
【画像処理入門】アルゴリズム&プログラミング

シェア&フォローお願いします!