blenderにopencvの代わりにscikit-image入れた
blenderにopenCVインストールしてみたもののimport cv2で落ちるという悲しい事件が起きたので代わりにscikit-image入れてみた。
インストール方法は基本的にはblenderで始める画像処理にある通りpipをインストールしてblenderのインストールしてある場所のpythonフォルダーにインストールという流れ。
scikit-image公式サイトからwindows用の
scikit_image-0.13.1-cp35-cp35m-win_amd64.whlをダウンロードし(ここではc:\tmpに置いた)そのまんまファイル名入れてpipなにがしを実行した。
Scripts\pip.exe install c:\tmp\scikit_image-0.13.1-cp35-cp35m-win_amd64.whl
blenderでimport skeimageすると要求されるのでそれもあらかじめインストールして置くこと(ただしmatplotlibは動かなかった)
Scripts\pip.exe install scipy
Scripts\pip.exe install matplotlib
で、blenderがProgram Filesにインストールされてる場合は管理者権限でコマンドプロンプトに入っとかなきゃいけない。
前回の通りにscikit-imageをコマンドプロンプトでインストールした後の流れについて、書いておこう。
レンダーレイヤーにソーベルとカラーランプを繋いで作った単純な線画
(カラーランプで二値化しておかないと真っ黒に変換されてしまう)
画像をいったん保存する(例によってこのサイトの”などは全角で表示されてしまうので要修正)
blimg = bpy.data.images['sikaku']
bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.image_settings.color_mode = 'RGBA'
blimg.save_render(’c:/tmp/sikaku.png’)
from skimage import io
img = io.imread(’c:/tmp/sikaku.png’)
import skimage.color
gimg = skimage.color.rgb2gray(img)
from skimage.morphology import skeletonize, skeletonize_3d
skeleton = skeletonize(gimg)
注意:img.show()とかするとblender落ちる!!
画像の色の取り方が違うのでこのまま保存すると黒が紫色になってしまうので直す。
(詳しくはhttp://scikit-image.org/docs/dev/user_guide/data_types.html(英語))
from skimage import img_as_ubyte
ub = img_as_ubyte(skeleton)
scikitで保存する場合
io.imsave("c:/tmp/saisen.png",ub)
PILで保存(matplotlibがimportできないため)
pilImg = Image.fromarray(numpy.uint8(ub))
pilImg.save("c:/tmp/saisen.png")
saisenimg = bpy.data.images.load('c:/tmp/pil_saisen.png')
saisenimg.name = 'saisen'
・matplotlibで途中経過を気軽に見れないのはつらい
・ほかにも面白そうな機能いっぱいあるお(^_-)-☆
・画像をいったん保存してどうのこうのといじるなら別にblenderでやらんでもいいのでわ(^^;)
import bpy
from skimage.morphology import skeletonize
#matplotlibはインポートできなかった。
#import matplotlib.pyplot as plt
from skimage.util import invert
from skimage import io
from PIL import Image
import skimage.color
import numpy
from skimage import img_as_ubyte
blimg = bpy.data.images['sikaku']
bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.image_settings.color_mode = 'RGBA'
blimg.save_render('c:/tmp/sikaku.png')
img = io.imread('C:/tmp/sikaku.png')
#反転する時はinvertを使う
#img=invert(img)
gimg = skimage.color.rgb2gray(img)
skeleton = skeletonize(gimg)
ub = img_as_ubyte(skeleton)
#scikitで保存する場合
io.imsave("c:/tmp/saisen.png",ub)
#pilで保存する場合
pilImg = Image.fromarray(numpy.uint8(ub))
pilImg.save('c:/tmp/saisen.png')
saisenimg = bpy.data.images.load('c:/tmp/pil_saisen.png')
saisenimg.name = 'saisen'