Blender Python 開発 〜imgファイルの輪郭を取得〜
ここ最近は、開発メモやらBlenderの操作方法など横道にそれていましたが。。。
できました!!
「イメージファイルの中身をBlender上に表示する」
作成した、pyファイルはこちらからダウンロードできます。
ちなみに、元々のイメージファイルは以下です。
今回のやったことは、以下の通りです。
0. OpenCvを読み込みBlender上で使用できるようにする
1. イメージファイルを読み込む
2. イメージを黒と白のみにする(グレースケール化)
3. グレースケールにしてから輪郭部分を取得
4. 輪郭を取得したイメージより輪郭部分の座標(1px=(x,y))
※横をX座標、縦をY座標として取得
5. 新たにvertex(点)を作成
スクリプトを起動した結果です。本当は、作成したPlaneの上に表示させる予定でしたが、Planeの座標は0->1の範囲なのに対して、配列の位置で座標取得を行ったため
以下のようになりました。(笑)
ポイントは3つ
・OpenCvを使用して輪郭を取得する
・取得した輪郭から点(Vertex)を作成する
・bmeshはエディットモードでないと動かない
現状の実装では、無駄な処理が多分に含まれているので
今後は、効率の良い方法を探そうと思います。
ソースの一部です。
ob = bpy.context.object
bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(ob.data)
print(len(list)) # 取得した点のはいれつ数を確認
print(list[0]) # リストの中身を確認
for co in list:
# 点の作成処理
bm.verts.new(co)
# 作成した点を画面に反映
bmesh.update_edit_mesh(ob.data)
# オブジェクトモードに戻す(コメントアウトしてます)
#bpy.ops.object.mode_set(mode='OBJECT')