在OpenCV python中测量点到遮罩的距离

2024-06-01 12:51:47 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个物体的面具和一个点。我想找到与该点最近的对象遮罩点

例如,在我的图形中,有一个对象,图像中的蓝色形状(假设内部也是对象遮罩的一部分)。红色的点是我想要找到离物体遮罩最近的距离的点

image

因此,我想找到一条粗绿线,因为它是到面具的最短距离,而不是其他的(粉色、橙色等)。我可以使用以下方法之一执行此操作:

  • 一种低效的方法是使用something like this(蛮力)查找所有像素到该点的距离
  • 另一种方法是用ε角差创建许多朝向遮罩的线,并找到该线上最近的点,这也不是很好
  • 我可以在边上创建线,并在对象边界上找到每条线的最近点。(这可能不像我想的那么容易,首先我需要找到外部边界,等等)

但这些方法都不是优雅的。我想知道什么是更优雅和最有效的方法来确定这一点


Tags: 对象方法图像图形距离somethinglike物体
2条回答

您可以执行某种二进制搜索:

    让我们称你的观点并考虑以p拾取遮罩上的任意点M,穿过M的圆将与遮罩相交
  • 现在重复直到收敛,若圆与遮罩相交,则减小半径,否则增大半径(按二进制搜索类型)

如果你的面具没有很好的连接,这将不起作用,但如果不是这样,我怀疑你能比暴力做得更好

二进制搜索的圆掩码交点检查时间日志的总成本应为线性

可以使用pointPolygonTest查找蓝色遮罩区域与任何点之间的最近距离

  1. 找到蓝色区域的轮廓,这就是我们的多边形

  2. 如果将“距离”标志设置为true,则可以找到点与多边形之间最近的距离

    closestDist=cv2.PointPolyContest(等高线[0],红点,真)

  3. 我们可以从这个函数得到的另一个信息是,如果距离为负,则点位于多边形外,如果点位于多边形边上,则距离为0,如果点位于多边形内,则距离为正

相关问题 更多 >