いままで気がつかなかったのですが、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関数から使うために用意されているようです。