Как найти точечный продукт двух линий (Opencv)

Я работаю над программой, которая требует от меня найти угол между двумя линиями. Я нашел все координаты точек линий, на которые ссылаются 0,0 точек, но я не понимаю, как реализовать произведение точек в Opencv, чтобы найти угол.

Я использую Visual C ++, используя библиотеку opencv. Я также узнал, что я могу использовать функцию cv :: Mat :: dot, чтобы получить точечный продукт, но я не могу найти хорошего примера. Я не могу понять объяснение в этом ссылка на сайт.

Кто-нибудь может дать мне хороший пример? так что я могу понять, как использовать эту функцию, чтобы найти скалярное произведение двух линий. Спасибо.

3

Решение

Если у вас есть два вектора, представляющих ваши строки, и назовите их a а также b (типа cv::Mat) тогда скалярное произведение вычисляется как

double p = a.dot(b);

редактировать
Пример кода, по комментариям автора.

float a[2] = {1.0, 2.0};
float b[2] = {3.0, 4.0};

cv::Mat AA(1,2,CV_32FC1,a);
cv::Mat BB(1,2,CV_32FC1,b);

cout << AA << endl;
cout << BB << endl;
cout << AA.dot(BB) << " should be equal to 11" << endl;
4

Другие решения

Ну, то скалярное произведение из двух векторов A и B определяется как

(length of A) * (length of B) * cos(angle)

где angle представляет угол между двумя векторами. Таким образом, чтобы найти угол между ними, сначала нужно найти скалярное произведение, затем разделить его на длину A и длину B, а затем взять обратный косинус.

То, на что это похоже в вашем случае, является чем-то вроде этого, предполагая, что a и b объявлены соответственно как cv::Mats:

double dotprod = a.dot(b);
double angle = arccos(dotprod / (a.size().height * b.size().height))
-4

По вопросам рекламы [email protected]