我正在开发一个程序,该程序需要我找到两条线之间的角度。我找到了线的所有点坐标,引用到 0,0 点,但我不明白如何在 Opencv 中实现点积来找到角度。
我使用使用 opencv 库的可视化 C++。我还发现我可以使用 cv::Mat::dot 函数来获取点积,但我找不到任何好的例子。我无法理解此链接中的解释。
谁能给我一个很好的例子?所以我可以理解如何使用该函数来查找两行的点积。谢谢你。
我正在开发一个程序,该程序需要我找到两条线之间的角度。我找到了线的所有点坐标,引用到 0,0 点,但我不明白如何在 Opencv 中实现点积来找到角度。
我使用使用 opencv 库的可视化 C++。我还发现我可以使用 cv::Mat::dot 函数来获取点积,但我找不到任何好的例子。我无法理解此链接中的解释。
谁能给我一个很好的例子?所以我可以理解如何使用该函数来查找两行的点积。谢谢你。
如果您有两个向量代表您的线,并称它们为a
and 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;
那么,两个向量 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))