Python根据3个点确定两个向量之间的夹角-180度到180方向进行矫正

import cv2  
import numpy as np  
  
# 读取图片  
image = cv2.imread(r'D:\dmp\cat.jpg')  
height, width = image.shape[:2]  
  
# 定义三个定位点(这里假设是图片上的坐标),分别表示原点,向量1终点,向量2终点,下例表示顺时针90度
pts1 = np.float32([[100, 100], [50, 100], [100, 200]])  
  
# 计算两个向量  
v1 = pts1[1] - pts1[0]  
v2 = pts1[2] - pts1[0]  
  
# 计算点积和模长  
dot_product = np.dot(v1, v2)  
norm_v1 = np.linalg.norm(v1)  
norm_v2 = np.linalg.norm(v2)  
  
# 计算夹角(弧度)  
angle_rad = np.arccos(dot_product / (norm_v1 * norm_v2))  
angle_deg = np.degrees(angle_rad)  # 将弧度转换为角度  
  
# 确定夹角的方向  
# 如果叉积小于0,则夹角是钝角或平角,需要调整角度到-180到0之间  
cross_product = v1[0] * v2[1] - v1[1] * v2[0]  
if cross_product < 0:  
    angle_deg = -angle_deg  
  
# 映射到[-180, 180]度之间  
angle_deg = (angle_deg + 180) % 360 - 180 
  
# 定义旋转中心点(这里假设是三个点的中心点)  
center = (width // 2, height // 2)
  
# 根据角度和中心点计算旋转矩阵  
M = cv2.getRotationMatrix2D(center, angle_deg, 1)  
  
# 旋转图片  
rotated_image = cv2.warpAffine(image, M, (width, height))  
  
# 显示旋转后的图片  
cv2.imshow('Rotated Image', rotated_image)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  
  
# 保存旋转后的图片(如果需要)  
# cv2.imwrite('path_to_save_rotated_image.jpg', rotated_image)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

誓天断发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值