首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到两条线的点积(Opencv)

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

Stack Overflow用户
提问于 2013-12-12 15:30:14
回答 2查看 9.9K关注 0票数 4

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

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

谁能给我举个好例子?因此,我可以理解如何使用该函数来查找两条线的点积。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-12 15:37:34

如果您有两个表示线的向量,并将它们称为ab (类型为cv::Mat),则点积的计算公式为

代码语言:javascript
复制
double p = a.dot(b);

编辑示例代码,作者评论。

代码语言:javascript
复制
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;
票数 6
EN

Stack Overflow用户

发布于 2013-12-12 15:48:31

两个向量A和B的dot product定义为

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

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

在您的示例中,假设a和b被适当地声明为cv::Mats,则如下所示:

代码语言:javascript
复制
double dotprod = a.dot(b);
double angle = arccos(dotprod / (a.size().height * b.size().height))
票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20537520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档