Python 写真をアニメ化する「OpenCV」

 本記事では、画像ファイルをアニメっぽく変換する雛形コードを載せました。変換例を4つ、下記のように動画にしました。

www.youtube.com

■本プログラム

import os, glob
import cv2
import numpy as np


def main():
    for file_path in file_path_list:
        # ファイルの読み出し
        img = cv2.imread(file_path)

        # 輪郭を抽出する処理
        gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
        dst = cv2.blur(gray, (3, 3)) # ぼかす
        dst = cv2.Canny(dst, 50, 150, apertureSize = 3)
        dst = cv2.cvtColor(dst, cv2.COLOR_GRAY2BGR) # RGBに戻す
        
        for scale in scale_list:
            img2 = img.copy()
            
            # 減色処理
            img3 = np.array(img2 / scale, dtype = np.uint8)
            img4 = np.array(img3 * scale, dtype = np.uint8)

            # アニメ画像へ変換(差分を減算処理)
            anime = cv2.subtract(img4, dst)
            
            # ファイルへ書き出し
            fine_name = os.path.splitext(os.path.basename(file_path))[0]
            cv2.imwrite(fine_name + '_' + str(scale) + '.jpg', anime)


if __name__ == '__main__':
    # 複数の画像ファイルのパスをリストで取得
    file_path_list = glob.glob('img/*.jpg')
    
    # 減色処理の度合い:値が大きい程にアニメ度が高くなる
    scale_list = [10, 20, 30, 40, 50, 60, 70, 80]

    main()
    

以上

<広告>