はじめに
塗り絵をやりたくなったが、塗り絵を買いにいくのがめんどくさかったので、自分で作ってみた。
画像処理はopencvを利用した。
色鉛筆は100均に買いに行った。
完成物
元画像
塗り絵化
準備
opencvのインストール
コマンドラインに下記コマンドを入力
pip install opencv-python
塗り絵化アルゴリズム
- 画像入力
- グレースケール化
- 膨張処理
- 2と3の差分取得
- 白黒反転
目的としては、画像のエッジを取得したいだけなので、エッジ抽出フィルタとかを使ってもできるかもしれない。
有名所で言えば、ソーベルフィルタ・ラプラシアンフィルタ・キャニーフィルタなど。
試していないから、気が向いたら今度やってみてもいいかも。
今回は、エッジが強く出過ぎるのを避けるために、エッジフィルタは利用しなかった。
画像を少し膨張させて、元の画像と差分を取ることで、エッジを抽出した。
差分を取ると、エッジが白・ベタ塗りが黒、で出力されるので、最後に白黒反転させて完成。
実際利用したコード
toNurie.py
import numpy as np
import cv2
#1. 画像入力
#2. グレースケール化(グレースケールで入力)
img = cv2.imread('Free.jpg', cv2.IMREAD_GRAYSCALE)
#3. 膨張処理
neiborhood = np.ones((5, 5), dtype=np.uint8)
dilated = cv2.dilate(img, neiborhood24, iterations=1)
#4. 2と3の差分取得
diff = cv2.absdiff(dilated, img)
#5. 白黒反転
result = 255 - diff
#画像出力
cv2.imwrite('output.jpg', result)
終わりに
好きなアニメシーンの塗り絵ができちゃう!