我用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