4

我正在开发一个程序,该程序需要我找到两条线之间的角度。我找到了线的所有点坐标,引用到 0,0 点,但我不明白如何在 Opencv 中实现点积来找到角度。

我使用使用 opencv 库的可视化 C++。我还发现我可以使用 cv::Mat::dot 函数来获取点积,但我找不到任何好的例子。我无法理解此链接中的解释。

谁能给我一个很好的例子?所以我可以理解如何使用该函数来查找两行的点积。谢谢你。

4

2 回答 2

6

如果您有两个向量代表您的线,并称它们为aand 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;
于 2013-12-12T07:37:33.837 回答
-4

那么,两个向量 A 和 B 的点积定义为

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

其中angle表示两个向量之间的角度。所以要求两者的夹角,首先要求点积,然后除以A的长度和B的长度,然后取反余弦。

cv::Mat假设 a 和 b 被适当地声明为s ,则在您的情况下看起来像这样:

double dotprod = a.dot(b);
double angle = arccos(dotprod / (a.size().height * b.size().height))
于 2013-12-12T07:48:30.990 回答