目次
概要
OpenCV の cv2.pointPolygonTest() を使用して、点がポリゴンの中に含まれるかどうかを判定する方法を解説します。
cv2.pointPolygonTest
retval = cv2.pointPolygonTest(contour, pt, measureDist)
公式リファレンス: cv2.pointPolygonTest
引数
名前 | 型 | デフォルト値 |
---|---|---|
contour | ndarray | |
ポリゴンを表す点の一覧 | ||
pt | tuple of 2 ints | |
点 | ||
measureDist | bool | |
|
返り値
名前 | 説明 | ||
---|---|---|---|
int | ポリゴンの中に点が含まれるかどうか (measureDist の説明参照) |
In [1]:
import cv2
import numpy as np
from matplotlib import pyplot as plt
# ポリゴン
polygon = np.array([[170, 113], [167, 57], [259, 50], [259, 105]])
# 点
points = [(100, 100), (250, 70), (170, 113), (259, 250)]
# 描画する。
fig, ax = plt.subplots()
ax.set_xlim([0, 300])
ax.set_ylim([0, 300])
ax.set_aspect("equal")
ax.add_patch(plt.Polygon(polygon, fill=False))
for i, pt in enumerate(points):
# 点 pt がポリゴン polygon に含まれるかどうか判定する。
color = "green" if cv2.pointPolygonTest(polygon, pt, False) >= 0 else "gray"
ax.scatter(pt[:1], pt[1:], color=color)
ax.text(*pt, "({}, {})".format(*pt), fontsize=12)
plt.show()
コメント