【CV】计算两个向量的夹角,并使用 OpenCV 可视化弧线

2024-01-09 16:54:56

背景

基于人体/动物,骨骼点数据,计算关节角度

1. 原理

计算两个向量的夹角,我们已三个点为例,BA 向量和BC向量,求 B 的角度。若为四个点,延长交叉即可。
在这里插入图片描述

2. 效果

效果图如下

请添加图片描述

3. 核心代码

def compute_vector_angle(a, b, c):
    """
    计算两个向量 ba 和 bc 向量的夹角
    @params a , 点 a
    @params b , 点 b
    @params c , 点 c
    """
    # 我这里为了好理解使用三个点数据,也可以用四个点
    triangle_data = [a, b, c]
    # 向量夹角
    ba_angle = math.atan2(a[1] - b[1], a[0] - b[0]) * 180 / math.pi
    bc_angle = math.atan2(c[1] - b[1], c[0] - b[0]) * 180 / math.pi
    b_angle = 0
    if ba_angle * bc_angle >= 0:
        # 第1,4象限
        b_angle = abs(ba_angle - bc_angle)
    else:
        # 第2,3象限
        b_angle = abs(ba_angle) + abs(bc_angle)
        if b_angle > 180:
            b_angle = 360 - b_angle
    print("\nba_angle:", ba_angle, "bc_angle:", bc_angle, "angle:", b_angle)
    start_angle = ba_angle
    end_angle = bc_angle
    return start_angle, end_angle, b_angle, triangle_data

4. 可视化

图像可视化,坐标和圆的坐标系如下,

  • 坐标系,相反
  • 圆坐标系,逆时针,如图所示
    在这里插入图片描述

5. 全部代码

实现 Python 代码,可直接执行,C++ 同理实现

#!/usr/bin/env python
# -

文章来源:https://blog.csdn.net/LABLENET/article/details/135482200
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。