【问题标题】:Calculate the distance between a point and a line in opencv?在opencv中计算点和线之间的距离?
【发布时间】:2022-01-15 20:10:15
【问题描述】:

我正在努力检测一个移动的物体,当它在交通中进行非法移动时(例如:下线)。但是由于 Opencv 的反向坐标系,当我用正确的公式计算它时,它并没有给我正确的答案。我的画线功能:

cv2.line(firstFrame, (250, 0), (130, 480), (0,255,0), 1) # left line
cv2.line(firstFrame, (320, 0), (320, 480), (0,255,0), 1) # center line
cv2.line(firstFrame, (390, 0), (510, 480), (0,255,0), 1) # right line

还有我的直线方程:

y +4x -1000 = 0 for the left line
y -4x +1560 = 0 for the right line

当我的对象向左移动时,它开始弄乱距离。当我看到计算出的距离和对象的质心坐标时,我发现了一些奇怪的东西:

虚线之间的区域有距离(UZAKLIK)和坐标(KONUM)值。它说当我的对象在 (105,225) 时,它到左边线的距离是 1.212 所以我在那个坐标上画了一个圆圈,可以看到它不可能接近值 1。它应该至少是 60 像素。我的左边线的距离计算器方法 - 其中 a 和 b 是点的 x,y 值 - :

def distanceFromLeft(a, b):
    nom = abs(a*1+b*4 -1000)
    denom = math.sqrt(17)
    return nom/denom

编辑:感谢所有答案。我发现问题出在哪里:我的距离计算器中的分子部分是错误的。 a 和 b 应该切换,因为 a 是该点的 x 值,并且必须乘以直线方程中 x 的系数

【问题讨论】:

  • -1000 是右行的 c,而不是左行的 c。你应该把你的变量名弄对。为什么点作为 a, b 而不是 x, y 传递?为什么分子叫x,分母叫y?看代码真的很费解。
  • @Thomas cv2 为点绘制左线: (250, 0), (130, 480) 。当我将这些值放入线方程计算器时,它会给出 y+4x-1000=0 。抱歉编码不好,我没有太多时间到最后期限
  • 坐标系。 Y 增长向下。左边的线有负斜率和正 y 轴截距。
  • @Christoph thx 回答,我应该怎么做才能获得正确的方程式?这让我感到很困惑,哈哈
  • 你有没有可能得到你的equations from brilliant.org

标签: python opencv math geometry


【解决方案1】:

看着formula on brilliant.org我看到他们说

ax + by + c = 0

你有

(1)y + 4x - 1000 = 0

注意 x 和 y 在不同的位置。如果在公式中交换 ab,它会返回 86.1 像素,这是正确的值。

也许您想让您的解决方案更加面向对象:

import math


class Line:
    def __init__(self, a_x, b_y, c):
        """
        Line in the form of ax+by+c=0
        :param c: offset at the y-axis
        """
        self.a = a_x
        self.b = b_y
        self.c = c

    def distance_to(self, x, y):
        nom = abs(self.a * x + self.b * y + self.c)
        denom = math.sqrt(self.a ** 2 + self.b ** 2)
        return nom / denom


left = Line(4, 1, -1000)
right = Line(-4, 1, 1560)
print(left.distance_to(105, 225))
print(right.distance_to(105, 225))

【讨论】:

  • 是的,我注意到在你告诉我大声笑之前几分钟。非常感谢你的努力,下次我会尽量关注我的变量:)
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 2018-05-21
  • 2019-03-20
  • 1970-01-01
  • 2014-11-29
  • 2017-10-14
  • 2013-07-17
  • 1970-01-01
相关资源
最近更新 更多