python如何识别点是否在cv2.line画的线上?

我用python3里面opencv模板编程,打开摄像头识别了一个物体轮廓并且画了出来矩形框(已经求出了左上角的坐标是(x,y)),然后在屏幕上用cv2.ellipse和cv2.line画了封闭线条图形,我想问一下怎么判断轮廓矩形左上坐标(x,y)是否在画的封闭线条上呀,麻烦各位朋友帮我解惑一下

我提供一个思路,既然你已经能画出封闭线条了,就说明你能知道封闭线条上面的点了,例如cv2.line()里面不是需要两点的参数吗?那么利用两点确定一条直线,就可以算出来这条直线的一般方程Ax+By+C=0,这样你就可以用一个数组[A,B,C]代表一条直线,然后把左上坐标[x,y]带入直线方程,看看是否等于0就知道在不在上面了,或者计算点到直线的距离是否为0也可以的,这个计算不难的。我前几天刚刚这么干过。给你代码参考下。


def param_line(point1, point2):
    '''
    Ax+By+C=0
    :param point1: [x1,y1]
    :param point2: [x2,y2]
    :return: A,B,C
    '''
    x1, y1 = point1
    x2, y2 = point2
    # (y2-y1)x-(x2-x1)y-x1(y2-y1)+y1(x2-x1)=0
    return [y2 - y1, x1 - x2, y1 * (x2 - x1) - x1 * (y2 - y1)]


def angle_Line2line(L1, L2):
    A1 = L1[0]
    B1 = L1[1]
    A2 = L2[0]
    B2 = L2[1]
    angle = math.acos(abs((A1 * A2 + B1 * B2) / ((A1 ** 2 + B1 ** 2) ** 0.5) * (A2 ** 2 + B2 ** 2) ** 0.5))
    return angle


def distance_point2line(line, point):
    A, B, C = line
    x, y = point
    distance = abs((A * x + B * y + C) / (A ** 2 + B ** 2) ** 0.5)
    return distance