Blender Python 開発 〜イメージからオブジェクトを作る(説明)〜
前回、イメージから点を表示するところまでやりました。
前回は家紋を表示したのですが、今回は別のものを表示します。
ちなみに、上記の画像は表示するパスを変更して実行しています。
元のソースはこちらです。(Gitからダウンロードできます)
一応処理内容を説明いたします。
# 必要なライブラリをインポートします。
import os, sys, numpy as np
import bpy, bmesh
# OpenCvのインストール先をパスに追加する
sys.path.append("/usr/local/lib/python3.6/site-packages/")
# OpenCvをインポート
import cv2
# 家紋のパス
#imgPath = "/Users/takk/BlenderPython/img/kamon/mouri-motonari-kamon.png"
imgPath = "/Users/takk/BlenderPython/img/human_what_is.png"
# イメージの読み込み
im = cv2.imread(imgPath,0)
# イメージを白黒のイメージに変換
thresh = cv2.Canny(im, 100, 200)
x = 0
y = 0
# 画面に出力するための点を設定する配列
list = []
# 取得するか否かの判定フラグ
pickupFlg = False
# 出力するリストへの追加をするしないの判定フラグ
addListFlg = True
# ピクセル格納用変数
tmp = 0
# エディットモードへ変更
bpy.ops.object.editmode_toggle()
# 対象のピクセルをリストへ追加するか判定するメソッド
def judge(col, tmp):
pickupFlg = (not col == tmp)
tmp = col
return pickupFlg
# リストへの追加処理メソッド
def isAddList(addListFlg, pickUpFlg, row, index):
# pickUpFlg = judge(row[index],tmp)
if pickUpFlg and addListFlg:
addListFlg = judge(row[index + 1], tmp)
return pickUpFlg
# 2次元配列の1次元目の配列長
xMax = len(thresh)
# 同様に2次元目の配列長
yMax = len(thresh[0])
# 確認用コンソール出力
print("X: %s Y: %s" % (str(xMax), str(yMax)))
# 配列の中身を取得する処理
for row in thresh:
for col in row:
pickupFlg = judge(col,tmp)
addListFlg = isAddList(addListFlg, pickupFlg, row, x)
if pickupFlg:
# 確認用処理
# print("pick: %s / add: %s" % (str(pickupFlg), str(addListFlg)))
if addListFlg:
# 確認用処理
# print("*** Add List ***")
# 出力用の配列へ追加する
list.append*1
# フラグを反転
addListFlg = not addListFlg
# 取得した配列の位置を示す変数
x += 1
x = 0
y += 1
# 3D_VIEWに出力する準備
ob = bpy.context.object
# エディットモードへ変更
bpy.ops.object.mode_set(mode='EDIT')
# BMeshを使用する(bpy.context.objectより作成)
bm = bmesh.from_edit_mesh(ob.data)
# 確認用
#print(len(list))
#print(list[0])
# 出力配列から点(vertex)を作成
for co in list:
bm.verts.new(co)
# 追加した点を反映
bmesh.update_edit_mesh(ob.data)
# オブジェクトモードへ変更(コメントアウト)
#bpy.ops.object.mode_set(mode='OBJECT')
そして、この次にはmeshへの変換を行いたいのですが。。。
皆目見当もつかない状況です。
今回、はここまでにします。
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
*1:y/(yMax-1) ,x/(xMax-1), 0