Python版OpenCVで写真・画像を漫画化、アニメ絵化、ドット絵化、ミニチュア化する方法をソースコード付きで解説します。
【Python版OpenCV】漫画風加工
Python版OpenCVで次のように写真を漫画風画像に変換してみます。
■入力画像(左)と出力画像(右)
■スクリーントーン画像
漫画風変換の基本的な流れは以下のとおりです。
– | 操作内容 |
---|---|
1 | 漫画風画像に使用したいスクリーントーン画像を用意。 |
2 | 写真をグレースケール変換。 |
3 | グレースケール画像に対してエッジ検出処理(Cannyアルゴリズムなどを使用)をおこない、さらに白黒反転させた輪郭画像を作成(※黒を輪郭、白を非輪郭とする)。 |
4 | グレースケール画像(2の処理後の物)を閾値処理し、白(255)、灰色(127)、黒(0)の三値化画像を作成5|三値化画像の灰色(127)の領域だけをスクリーントーン画像と入れ替えます。 |
6 | 手順5で作成した画像と、手順3で作成した輪郭画像を合成すれば漫画風画像の完成。 |
詳細 | 「【画像処理】写真を漫画風に加工する原理・仕組み」 |
動画解説
サンプルプログラムのソースコードです。
【Python/OpenCV】写真のアニメ絵化
Python版OpenCVの空間フィルタ処理などを組み合わせると写真をアニメ絵化できます。
大まかな処理手順は以下の通りです。
動画解説
本ページの内容は以下動画でも解説しています。
– | 説明 |
---|---|
① | Cannyアルゴリズムで輪郭画像の作成 |
② | 入力画像の減色処理を行う(領域分割 or K平均法など) |
③ | 入力画像から輪郭画像を引く(輪郭部分が黒くなる) |
サンプルプログラムのソースコードです。
単純に減色処理
領域分割で減色
cv2.pyrMeanShiftFilteringメソッドは、平均値シフト法で領域分割します。
領域分割は、近傍の画素の輝度値(色)が類似している場合に同じ領域に属すると判定するものです。同じ領域にある全ての画素は、全体の平均値を画素値とします。これを行うことで、写真がフラットになりアニメ絵っぽくなります。
k-means法で減色
■入力画像(左)と出力画像(右)
【Python/OpenCV】写真のミニチュア風化
写真をミニチュア風に変換するには、以下の①②の処理をかけます。
①画像の彩度を上げます。(HSV色空間)
②画面にぼかし処理をかけます。(平均値フィルタ等で上にいくほど強いぼかしをかける)
動画解説
本ページの内容は以下動画でも解説しています。
■入力画像(input.jpg)、出力画像(output.jpg)
【Python/OpenCV】写真のドット絵化(ピクセルアート)
写真をドット絵に変換するには、以下の①②の処理をかけます。
① 画像をモザイク処理します。(単純に拡大→縮小)
② 画像を減色処理(k平均法で色の数を削減)します。
動画解説
本ページの内容は以下動画でも解説しています。
サンプルコード
■入力画像(input.jpg)
■出力画像(output.jpg)
左(alpha=0.5、K=4)、右(alpha=0.3、K=3)
お借りした画像:プロ生ちゃん(暮井 慧)
コメント