Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

Blender Python + OpenCV〜輪郭の表示〜

前回は、画像を読み込みそれをテクスチャとしてオブジェクトに貼り付けました。

今回は、読み込んだ画像を、グレースケール(灰色)で読み込み、
輪郭を表示します。

早速コードを見てみましょう。
※下のリンクからソースをダウンロードできます。

20180212_A.py ----------------------------------

import os
import bpy
import numpy as np
import sys
sys.path.append('/usr/local/lib/python3.6/site-packages/cv2/')

import cv2


fileName = os.getcwd() + '/BlenderPython/img/images.jpeg'

im = cv2.imread(fileName,0)

thresh = cv2.Canny(im, 100, 200)

cv2.imshow('test', thresh)
#cv2.waitKey(0)
#cv2.destroyAllWindows()

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

イメージファイルを読み込むまでは、前回と同じコードです。
「Canny法」と言うアルゴリズムを使用していますが、意味がわかりませんでした(笑)

実行結果は以下になります。

【元の画像】

f:id:Takunoji:20180212154147p:plain

【出力結果】

f:id:Takunoji:20180212154218p:plain

輪郭を表示するまでには、グレースケール(灰色)で画像を読み込む必要があります。
>im = cv2.imread(fileName,0)

 第二引数の「0」がグレースケールで画像を読み込むためのフラグの様です。
詳細は、下のサイトを参照してください。

画像のしきい値処理 — OpenCV-Python Tutorials 1 documentation


そして、シンプルに「Canny法」を実装した「Canny」を使用します。
>thresh = cv2.Canny(im, 100, 200)
第二、第三引数の数値は、参考サイトにあったのでそのまま設定しました。

詳細は、下のサイトを参照してください。

Canny法によるエッジ検出 — OpenCV-Python Tutorials 1 documentation


以上が輪郭を表示するまででした。
ついでなので他のファイルも少しアップいたします。

【豚さん】
before                                                        after

f:id:Takunoji:20180212160040p:plain                 f:id:Takunoji:20180212160104p:plain

 

【イラスト】

before                                                       after

f:id:Takunoji:20180212160148p:plain                               f:id:Takunoji:20180212160220p:plain

以上でした。

次回は、取得した輪郭から輪郭線の座標を取得します。

輪郭の取得とかは難しかったため、アドオンの作成を行います。