我找到了两种主要的方法来查看一个点是否属于多边形.一个是使用这里使用的光线跟踪方法,这是最推荐的答案,另一个是使用matplotlib path.contains_points(这对我来说似乎有点模糊).我将不得不连续检查很多点.有人知道这两个中的任何一个是否比另一个更值得推荐,或者是否有更好的第三选择?
更新:
我检查了两种方法,matplotlib看起来要快得多.
from time import time
import numpy as np
import matplotlib.path as mpltPath
# regular polygon for testing
lenpoly = 100
polygon = [[np.sin(x)+0.5,np.cos(x)+0.5] for x in np.linspace(0,2*np.pi,lenpoly)[:-1]]
# random points set of points to test
N = 10000
points = zip(np.random.random(N),np.random.random(N))
# Ray tracing
def ray_tracing_method(x,y,poly):
n = len(poly)
inside = False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if …Run Code Online (Sandbox Code Playgroud) 我在Python 2.7.9上使用OpenCV 3.0.0.我正在尝试跟踪具有静止背景的视频中的对象,并估计其某些属性.由于图像中可能存在多个移动对象,因此我希望能够区分它们并在视频的剩余帧中单独跟踪它们.
我认为可以做到的一种方法是将图像转换为二进制,获取斑点的轮廓(在这种情况下为跟踪对象)并获取对象边界的坐标.然后我可以转到灰度图像中的这些边界坐标,获得由该边界包围的像素强度,并跟踪其他帧中的这种颜色梯度/像素强度.这样,我可以保持两个对象彼此分开,因此它们不会被视为下一帧中的新对象.
我有轮廓边界坐标,但我不知道如何检索该边界内的像素强度.有人可以帮帮我吗?
谢谢!