c++ - opencv中的以下方法是什么意思?

标签 c++ image-processing opencv javacv

我正在使用 javacv 进行对象检测项目,因为我浏览了几个用于检测矩形的代码示例,我发现所有大多数代码示例都在这些类中包含以下方法。

请哪位高人解释一下这个方法的含义或者用法。

double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 )
{
    double dx1 = pt1->x - pt0->x;
    double dy1 = pt1->y - pt0->y;
    double dx2 = pt2->x - pt0->x;
    double dy2 = pt2->y - pt0->y;
    return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
} 

This是该方法的来源。

最佳答案

正如你猜到的,这计算了两个 vector (pt1, pt0) , (pt2, pt0) 夹角的余弦

公式是这样的: Cos(theta) = DotProduct(a,b)/(length(a) * length(b))

enter image description here

对于最后一部分 1e-10,这可能是为了避免在零长度 vector 上除以零错误。

关于c++ - opencv中的以下方法是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11279742/

相关文章:

c++ - Friend 模板函数(在非模板类中),C++

c++ - 设置 Gtk::TextView 的最大宽度

c++ - 如何在 C++ 中从 .cr2 读取图像数据?

image-processing - 在 Keras ImageDataGenerator 流方法中调整图像大小

opencv - 如何在OpenCV中绘制填充形状

python - 使用 findContour 和生成的轮廓近似线段以找到线交点

c++ - 将参数传递给 C++ 程序以在 VSCode 中进行调试

C++ for_each 算法和字符串

c++ - OPENCV waitKey() 方法返回类型

c++ - 墨西哥帽运算符的 OpenCV C++ 代码