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