あなたはここに、http://pypi.python.org/pypi/Polygon/2.0.4を使用することができますが例です。
>>> import Polygon
>>> a = Polygon.Polygon([(0,0),(1,0),(0,1)])
>>> b = Polygon.Polygon([(0.3,0.3), (0.3, 0.6), (0.6, 0.3)])
>>> a & b
Polygon:
<0:Contour: [0:0.60, 0.30] [1:0.30, 0.30] [2:0.30, 0.60]>
ポリゴン小数点形式にcv2.findContoursの結果を変換するには、次のことができます。
points1 = contours[0].reshape(-1,2)
これから形状を変換します(N、1,2)から(N、2)
import Polygon
import cv2
import numpy as np
from scipy.misc import bytescale
y, x = np.ogrid[-2:2:100j, -2:2:100j]
f1 = bytescale(np.exp(-x**2 - y**2), low=0, high=255)
f2 = bytescale(np.exp(-(x+1)**2 - y**2), low=0, high=255)
c1, hierarchy = cv2.findContours((f1>120).astype(np.uint8),
cv2.cv.CV_RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
c2, hierarchy = cv2.findContours((f2>120).astype(np.uint8),
cv2.cv.CV_RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
points1 = c1[0].reshape(-1,2) # convert shape (n, 1, 2) to (n, 2)
points2 = c2[0].reshape(-1,2)
import pylab as pl
poly1 = pl.Polygon(points1, color="blue", alpha=0.5)
poly2 = pl.Polygon(points2, color="red", alpha=0.5)
pl.figure(figsize=(8,3))
ax = pl.subplot(121)
ax.add_artist(poly1)
ax.add_artist(poly2)
pl.xlim(0, 100)
pl.ylim(0, 100)
a = Polygon.Polygon(points1)
b = Polygon.Polygon(points2)
intersect = a&b # calculate the intersect polygon
poly3 = pl.Polygon(intersect[0], color="green") # intersect[0] are the points of the polygon
ax = pl.subplot(122)
ax.add_artist(poly3)
pl.xlim(0, 100)
pl.ylim(0, 100)
pl.show()
出力:あなたはこのようなintersect1d機能を単一の次元として、配列のビューを使用することができます
この方法は本当に高速ですか?キャプチャするたびに各フレームの交差をチェックしておく必要があり、システムリソースはあまり高くありません。 –
opencvの輪郭または凸包からポリゴンを作成しようとすると、これは私が受け取るエラーです。 'cPolygon.Error:操作のポリゴンまたは輪郭が無効です ' 指定したフォーマットは、私の元の投稿に掲載されています)。私はいくつかの修正が必要かもしれないと仮定しますが、それがどのように行われるのか想像できません。 –
サンプルデータを投稿してください。 – HYRY