いままで気がつかなかったのですが、matplotlibにも、ドロネー三角形を作成するモジュールがありました。使い方メモ。
# -*- coding: utf8 -*-
"""example for matplotlib.delaunay.triangulate
ドロネー三角形サンプルコード"""
import matplotlib.pyplot as plt
from matplotlib.delaunay.triangulate import Triangulation
import numpy as np
#matplotlib 初期化
plt.interactive(True)
fig=plt.figure(111)
fig.clear()
ax = fig.add_subplot(111)
#ランダムな点を作成
x=np.random.randn(100) # X 座標
y=np.random.randn(100) # Y 座標
#点からドロネー三角形を作成
tri=Triangulation(x,y) #
plt.plot(x,y,"ro") #赤で点を表示
#エッジの連結順序を取り出し
for edge in tri.edge_db:
i , j = edge
# i 番目の点と j 番目の点を連結する線を引く
plt.plot( [x[i],x[j]], [y[i],y[j]] ,"b") #青で線を引く
#
#plt.plot( x[edge], y[edge], "b" ) #ホントは、こう書いたほうが速い
plt.show() # IDLEから起動するときはコメントアウト
サンプルコードでは画面表示を伴ってるので点100個ぐらいでもちょっと重いですが、点を与えてドロネー三角形に分割するだけなら 千個ぐらいの点でも一瞬です。
こっちのほうがOpenCVを使うよりも断然 お手軽ですね。もっと早く知りたかったですw 連結順序だけでなく、個々の三角形として取り出す方法もあるようです。
これは、主として、matplotlib.mlab.griddata関数から使うために用意されているようです。