Найдите точки за строкой, используя Python

Обращаясь к заданному вопросу. Рисуя линию с учетом угла и точки на линии , я написал функцию python «find_normal», которая возвращает наклон и y-перехват нормального вектора в заданную точку под заданным углом.

Теперь у меня есть список точек, и я хочу проверить, находятся ли эти точки вне этого нормального вектора в направлении заданного угла нет. например

  • Angle = 180: True, если точка находится слева от строки, false в противном случае
  • Angle = 0: True, если точка находится справа от линии, false в противном случае
  • 0 <Угол <180: Истина, если точка находится ниже линии, false в противном случае
  • 180 <Угол <360: Истина, если точка выше линии, false в противном случае

Для этого я написал еще одну функцию 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) 

One Solution collect form web for “Найдите точки за строкой, используя Python”

Если c и s – косинус и синус угла, функция должна возвращать True для точки (x, y), если c * (x-x1) + s * (y-y1)> = 0, где (x1, y1) любая точка на красной линии.

  • Новое для Python Opencv: отслеживание движения с использованием веб-камеры Thresholding / dilate
  • Возможно ли в OpenCV построить локальную кривизну в виде тепловой карты, представляющей «интересность» объекта?
  • Как изображения фактически сохраняются с помощью skimage (Python)
  • Python / OpenCV: вычисление карты глубины из стереоизображений
  • Python: Urllib2 и OpenCV
  • TypeError: Требуемый аргумент 'outImg' (поз. 6) не найден
  • cv2 3.0.0 cv2.FlannBasedMatcher: flann.knnMatch бросает ошибку cv2
  • OpenCV: 4 камера с видом на птичий глаз?
  • Написание видео с помощью OpenCV + Python + Mac
  • Конфликтующие типы Numpy и OpenCV2 при вызове функций OpenCV
  • Возможности OpenCV Python и SIFT
  • Python - лучший язык программирования в мире.