在Python OpenCV中,有没有从给定圆外的轮廓上删除点的方法?

在Python OpenCV中,有没有从给定圆外的轮廓上删除点的方法?,python,opencv,contour,Python,Opencv,Contour,假设我有一个轮廓,用来表示手的形状。问题是,轮廓还包含手臂的其他部分(即手腕、前臂、上臂等),为了找到手的中心位置,我查看凸包缺陷点的组合(尺寸3),找到与这3个点相切的圆心,并将最合理的平均值加在一起,以大致了解手的中心位置 有了这个平均中心,我希望能够移除给定轮廓上的点,这些点不在可能决定手的宽度的某个半径内——换句话说,不在这个圆内的截止点。我可以简单地遍历每个轮廓点并删除这些点,但由于Python循环的速度,这将是非常低效的。是否有一种更快或更有效的方法来实现这一点,可能是使用一些内置的

假设我有一个轮廓,用来表示手的形状。问题是,轮廓还包含手臂的其他部分(即手腕、前臂、上臂等),为了找到手的中心位置,我查看凸包缺陷点的组合(尺寸3),找到与这3个点相切的圆心,并将最合理的平均值加在一起,以大致了解手的中心位置

有了这个平均中心,我希望能够移除给定轮廓上的点,这些点不在可能决定手的宽度的某个半径内——换句话说,不在这个圆内的截止点。我可以简单地遍历每个轮廓点并删除这些点,但由于Python循环的速度,这将是非常低效的。是否有一种更快或更有效的方法来实现这一点,可能是使用一些内置的OpenCV函数或其他方法

谢谢

有趣的后续行动

可以通过布尔索引删除不需要的点:

import numpy as np
hand_contour = np.random.rand(60,2)  # you can use np.squeeze on the data from opencv to get rid of that annoying singleton axis (60,1,2)->(60,2)
# You have found the center of the palm and a possible radius
center = np.array([.3, .1])
radius = .3
mask = (hand_contour[:,0] - center[0])**2 + (hand_contour[:,1] - center[1])**2 < radius**2
within_palm = hand_contour[mask,:]  # Only selects those values within that circle.
将numpy导入为np
hand_contour=np.random.rand(60,2)#您可以对opencv中的数据使用np.squence来消除恼人的单态轴(60,1,2)->(60,2)
#您已找到手掌中心和可能的半径
中心=np.数组([.3,.1])
半径=.3
掩模=(手部轮廓[:,0]-中心[0])**2+(手部轮廓[:,1]-中心[1])**2<半径**2
在_palm=hand _轮廓[mask,:]#内仅选择该圆内的值。
您也可以使用
掩码_数组
来屏蔽不需要的值,但是如果您对保留原始数据不感兴趣,可以使用上述方法