Пересечение, вероятно, происходит между точками. Давайте рассмотрим следующий пример:
import numpy as np
import matplotlib.pyplot as plt
xs=np.arange(0, 20)
y1=np.arange(0, 20)*2
y2=np.array([1, 1.5, 3, 8, 9, 20, 23, 21, 13, 23, 18, 20, 23, 24, 31, 28, 30, 33, 37, 36])
, начертив два вышеприведенных кривых вместе с их пересечениями, используя в качестве пересечения средние координаты до и после предложенного из idx
пересечения, все точки ближе к первому кривая.
idx=np.argwhere(np.diff(np.sign(y1 - y2 )) != 0).reshape(-1) + 0
plt.plot(xs, y1)
plt.plot(xs, y2)
for i in range(len(idx)):
plt.plot((xs[idx[i]]+xs[idx[i]+1])/2.,(y1[idx[i]]+y1[idx[i]+1])/2., 'ro')
plt.legend(['Y1', 'Y2'])
plt.show()
, используя в качестве пересечения средние координаты до и после, но для обеих кривых y1 и y2 обычно ближе к истинному пересечению
plt.plot(xs, y1)
plt.plot(xs, y2)
for i in range(len(idx)):
plt.plot((xs[idx[i]]+xs[idx[i]+1])/2.,(y1[idx[i]]+y1[idx[i]+1]+y2[idx[i]]+y2[idx[i]+1])/4., 'ro')
plt.legend(['Y1', 'Y2'])
plt.show()
Для еще более точной оценки пересечения мы можем использовать интерполяцию.
Попробуйте эту ссылку: https://www.learnopencv.com/head-pose-estima-using-opencv-and-dlib/
Короче говоря, вы необходимо знать трехмерные координаты некоторых точек человека и его 2D-проекции на плоскости датчика камеры, а затем использовать алгоритм PnP (Perspective-n-Point) для оценки положения камеры относительно человека. Лучше знать калибровку камеры, но вы можете использовать алгоритм DLT (прямое линейное преобразование), если у вас нет этих данных.