qq_52588835
qq_52588835
采纳率33.3%
2021-02-25 17:11

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qq_34124780 qq_34124780 2月前

    我提供一个思路,既然你已经能画出封闭线条了,就说明你能知道封闭线条上面的点了,例如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
    
    点赞 2 评论 复制链接分享

为你推荐