qq_52588835 2021-02-25 17:11 采纳率: 0%
浏览 396

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

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

  • 写回答

1条回答 默认 最新

  • 爱晚乏客游 2021-02-25 18:32
    关注

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

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器