2024-06-01 12:51:47 发布
网友
假设我有一个物体的面具和一个点。我想找到与该点最近的对象遮罩点
例如,在我的图形中,有一个对象,图像中的蓝色形状(假设内部也是对象遮罩的一部分)。红色的点是我想要找到离物体遮罩最近的距离的点
因此,我想找到一条粗绿线,因为它是到面具的最短距离,而不是其他的(粉色、橙色等)。我可以使用以下方法之一执行此操作:
但这些方法都不是优雅的。我想知道什么是更优雅和最有效的方法来确定这一点
您可以执行某种二进制搜索:
如果你的面具没有很好的连接,这将不起作用,但如果不是这样,我怀疑你能比暴力做得更好
二进制搜索的圆掩码交点检查时间日志的总成本应为线性
可以使用pointPolygonTest查找蓝色遮罩区域与任何点之间的最近距离
找到蓝色区域的轮廓,这就是我们的多边形
如果将“距离”标志设置为true,则可以找到点与多边形之间最近的距离
closestDist=cv2.PointPolyContest(等高线[0],红点,真)
我们可以从这个函数得到的另一个信息是,如果距离为负,则点位于多边形外,如果点位于多边形边上,则距离为0,如果点位于多边形内,则距离为正
您可以执行某种二进制搜索:
让我们称你的观点并考虑以p拾取遮罩上的任意点M,穿过M的圆将与遮罩相交- 现在重复直到收敛,若圆与遮罩相交,则减小半径,否则增大半径(按二进制搜索类型)
如果你的面具没有很好的连接,这将不起作用,但如果不是这样,我怀疑你能比暴力做得更好
二进制搜索的圆掩码交点检查时间日志的总成本应为线性
可以使用pointPolygonTest查找蓝色遮罩区域与任何点之间的最近距离
找到蓝色区域的轮廓,这就是我们的多边形
如果将“距离”标志设置为true,则可以找到点与多边形之间最近的距离
closestDist=cv2.PointPolyContest(等高线[0],红点,真)
我们可以从这个函数得到的另一个信息是,如果距离为负,则点位于多边形外,如果点位于多边形边上,则距离为0,如果点位于多边形内,则距离为正
相关问题 更多 >
编程相关推荐