Takunojiの日記

自分が勉強したプログラム技術メモ

Blender Python + OpenCV〜画像読み込みとテクスチャ〜

前回OpenCv(python)を使用して画像の読み込み、サイズの表示を行いました。
OpenCvの逆引きサイトなどを参考に3Dモデル作成。。。なんて考えましたが。。。

人間一歩ずつ歩まなければ身につくものも身につきません。(言い訳です)
と言うわけで、今回は
読み込んだ画像をテクスチャとして表示します。

参考にするサイトはこちらになります。

コードのみのサイトでした。以下のコードです。

def material_for_texture(fname):
    img = bpy.data.images.load(fname)

    tex = bpy.data.textures.new(fname, 'IMAGE')
    tex.image = img

    mat = bpy.data.materials.new(fname)
    mat.texture_slots.add()
    ts = mat.texture_slots[0]
    ts.texture = tex
    ts.texture_coords = 'UV'
    ts.uv_layer = 'default'

    return mat

結局は、
1.ファイル(フルパス)→「C:¥XXX¥XXX¥ファイル.png」などをロード
2.マテリアルを作成
3.テクスチャにセット
とやっていました。
はじめの方に余計なコードがありますが、以下のコードを実行しました。
※Gitより以下のソースをダウンロードできます。

20180211_B.py -----------------------------------------------

import os
import sys
import bpy

sys.path.append('/usr/local/lib/python3.6/site-packages/cv2/')

import cv2

fileName = os.getcwd() + '/BlenderPython/img/Dojo.png'
# this is Normal Loading
#image = cv2.imread(fileName)

# this is GrayScale Loading
image = cv2.imread(fileName, cv2.IMREAD_GRAYSCALE)

# Create Material
mat = bpy.data.materials.new('ImageMat')
# Create Texture
tex = bpy.data.textures.new(fileName, type='IMAGE')
tex.image = bpy.data.images.load(fileName)

# Add material slots
mat.texture_slots.add()
mat.texture_slots[0].texture = tex

obj = bpy.context.scene.objects.active
obj.data.materials.append(mat)

-----------------------------------------------

 

f:id:Takunoji:20180211163148p:plain

汚い感じになっていますがイメージファイルをテスクチャとして表示しております。
はじめの方にある「cv2.cv2.imread(fileName)」などは、今回は関係ありません。。。

次回は、画像の輪郭を読み込もうと思います。