Takunojiの日記

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

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

以上でした。

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

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