如何找到两条线的点积(Opencv)

时间:2013-12-12 07:30:14

标签: c++ opencv dot-product

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

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

有谁能举个好榜样?所以我可以理解如何使用该功能找到两行的点积。谢谢。

2 个答案:

答案 0 :(得分:4)

如果您有两个代表您的行的向量,并将其称为ab(类型为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))