我正在制作一个程序,要求我找到两条线之间的角度。我找到了线的所有点坐标,引用了0,0点,但我不明白如何在Opencv中实现点积来找到角度。
我使用opencv库使用visual C ++。我还发现我可以使用cv :: Mat :: dot函数来获得点积,但我找不到任何好的例子。我无法理解link中的解释。
有谁能举个好榜样?所以我可以理解如何使用该功能找到两行的点积。谢谢。
答案 0 :(得分:4)
如果您有两个代表您的行的向量,并将其称为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;
答案 1 :(得分:-4)
嗯,两个向量A和B的dot product被定义为
(length of A) * (length of B) * cos(angle)
其中angle
表示两个向量之间的角度。因此,为了找到两者之间的角度,首先必须找到点积,然后将其除以A的长度和B的长度,然后取反余弦。
在你的情况下看起来是这样的,假设a和b被恰当地声明为cv::Mat
s:
double dotprod = a.dot(b);
double angle = arccos(dotprod / (a.size().height * b.size().height))