【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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!