LoginSignup
2
1

More than 3 years have passed since last update.

機械学習を用いたカラーイラスト線画の自動生成

Last updated at Posted at 2020-12-17

初めに(^ω^)

絵が描けると何かとはかどりますよね。絵が描ける人間になってみたいと思ったのですが、無理だったので自動で作れるAIを作成してみました。難しかったですが、楽しかったのでうれしかったです。

作成したソースコード


#-----------------------------------------
#線画の自動生成
#-----------------------------------------
import numpy as np
import cv2

#保存先指定
file = './text11.txt'

#カラーで読み込み
img = cv2.imread('./shigure.png')
#グレースケールで読み込み
img2 = cv2.imread('./shigure.png',0)

#Numy配列に保存
im = np.array(img2)

#閾値設定による二値化処理
Threshold = 120
im[im < Threshold] = 0
im[im >= Threshold] = 255

#特徴量フィルター生成
#フィルター1
kernel = np.array([[0, -1, 0],
                   [-1, 4, -1],
                   [0, -1, 0]], dtype=np.uint8)

#膨張処理
dilation = cv2.dilate(im, kernel, iterations = 1)

#差分処理(膨張処理を行ったデータからグレースケール画像を引く)
Difference = dilation - im

#色反転
Difference[:, :] = 255 - Difference[:, :]

#テキスト出力
np.savetxt(file, Difference, fmt="%0.0f", delimiter=",")

#出力
print (Difference)

#画像出力
cv2.imwrite('./Difference.png', Difference)

コード解説

コード実行結果

元画像
shigure.png

線画画像
Difference.png

元画像
ダウンロード.png

線画画像
hoge.png

コード解説あれこれ

特徴量フィルター生成

#特徴量フィルター生成
#フィルター1
kernel = np.array([[0, -1, 0],
                   [-1, 4, -1],
                   [0, -1, 0]], dtype=np.uint8)

 フィルターの生成を行っています。中身の数字をいろいろいじってみると面白いかも

膨張処理

#膨張処理
dilation = cv2.dilate(im, kernel, iterations = 1)

 線の部分を太くしています。前景物体を膨張!

差分処理

#差分処理(膨張処理を行ったデータからグレースケール画像を引く)
Difference = dilation - im

差分処理したことによって線画が浮き出ますね!

参考文献

OpenCV-Pythonチュートリアルドキュメント

目次のようなもの

Re:ゼロから始める機械学習生活(深層学習もあるよ)
ここに進捗状況等を載せてます。
今まで書いたものを一覧にしていたりするので見てみてください!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1