使用Python查找线以外的点

使用Python查找线以外的点,python,opencv,image-processing,computer-vision,augmented-reality,Python,Opencv,Image Processing,Computer Vision,Augmented Reality,关于这里提出的问题,我已经编写了一个python函数“find_normal”,它返回法向量在给定角度下到给定点的斜率和y截距 现在我有一个点列表,我想验证这些点是否超出了给定角度方向上的法向量。e、 g 角度=180:如果点位于直线的左侧,则为True,否则为false 角度=0:如果点位于直线右侧,则为True,否则为false 0

关于这里提出的问题,我已经编写了一个python函数“find_normal”,它返回法向量在给定角度下到给定点的斜率和y截距

现在我有一个点列表,我想验证这些点是否超出了给定角度方向上的法向量。e、 g

  • 角度=180:如果点位于直线的左侧,则为True,否则为false
  • 角度=0:如果点位于直线右侧,则为True,否则为false
  • 0<角度<180:如果点位于直线下方,则为真,否则为假
  • 180<角度<360:如果点在直线上方,则为真,否则为假
为此,我编写了另一个函数find_points_ahead,它使用find_normal的结果突出显示法向量以外的所有点。如下面的屏幕截图所示

但在某些角度,一些不符合标准的点也会突出显示。例如,箭头指向下方,只有红线下方的点应高亮显示。相反,线上方的一些点也高亮显示。有人能帮我吗

def find_normal(img,point,angle):

    x1=point[0]
    y1=point[1]
    angle_rad=np.radians(angle)

    c=-1*np.sin(angle_rad)
    s=np.cos(angle_rad)

    start_x=int(x1 - c * 640)
    start_y=int(y1 - s * 640)
    end_x=int(x1 + c * 640)
    end_y=int(y1 + s * 640)

    m=int((end_y-start_y)/(end_x-start_x))
    y_intercept=end_y-(m*end_x)

    cv2.line(img, (start_x,start_y), (end_x,end_y), [0, 0, 255], 3, cv2.LINE_AA)

    return m,y_intercept


def find_points_ahead(img,base_point,angle,points):

    m,c=find_normal(img,base_point,angle)

    for pt in points:
        pt_x=pt[0]
        pt_y=pt[1]
        result=m*pt_x-pt_y+c
        if angle>0 and angle<180 and result<0:
            cv2.circle(img,(pt_x,pt_y),3,[0,0,255],3,cv2.LINE_AA)
        elif angle>180 and angle<360 and result>0:
            cv2.circle(img,(pt_x,pt_y),3,[0,0,255],3,cv2.LINE_AA)
def find_normal(图像、点、角度):
x1=点[0]
y1=点[1]
角度弧度=np弧度(角度)
c=-1*np.sin(角弧度)
s=np.cos(角弧度)
起点x=int(x1-c*640)
起始y=int(y1-s*640)
end_x=int(x1+c*640)
结束y=int(y1+s*640)
m=int((结束y-开始y)/(结束x-开始x))
y_截距=end_y-(m*end_x)
cv2.行(img,(开始x,开始y),(结束x,结束y),[0,0255],3,cv2.行AA)
返回m,y_截距
def查找前方的点(img、基点、角度、点):
m、 c=找到法线(img、基点、角度)
对于pt in点:
pt_x=pt[0]
pt_y=pt[1]
结果=m*pt_x-pt_y+c

如果角度>0且角度如果c和s是角度的余弦和正弦,则当c*(x-x1)+s*(y-y1)>=0时,函数必须为点(x,y)返回真,其中(x1,y1)是红线上的任何点。

谢谢@Gribouillis。。。工作得很有魅力:)