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)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 获取类型 Type.GetType()

背景 C#是强类型语言&#xff0c;任何对象都有Type&#xff0c;有时候需要使用Type来进行反射、序列化、筛选等&#xff0c;获取Type有Type.GetType, typeof()&#xff0c;object.GetType() 等方法&#xff0c;本文重点介绍Type.GetType()。 系统类型/本程序集内的类型 对于系…

ref和reactive用哪个?

ref和reactive用哪个? 1.&#x1f916;GPT&#x1f916;:ref和reactive用哪个根据数据类型而定 ref 用于将基本类型的数据&#xff08;如字符串、数字&#xff0c;布尔值等&#xff09;转换为响应式数据。使用 ref 定义的数据可以通过 .value 属性访问和修改。 reactive 用于…

二、TensorFlow结构分析(1)

目录 1、TF数据流图 1.1 TensorFlow结构分析 1.2 案例 2、图与TensorBoard 2.1 图结构 2.2 图相关操作 2.2.1 默认图 2.2.2 创建图 2.3 TensorBoard&#xff1a;可视化学习 2.3.1 数据序列化 - events文件 2.3.2 启动TensorBoard 2.4 OP 2.4.1 常见OP 2.4.2 指令…

HTML5:七天学会基础动画网页4

backgorund-size 值与说明 length(单位像素):设置背景图片高度和宽度&#xff0c;第一个值设置宽度&#xff0c;第二个值设置高度&#xff0c;如果只给出一个值&#xff0c;第二个是设置为auto。 percentage(百分比):以父元素的百分比来设置背景图像的宽度和高度&#xff0c…

NLP(一)——概述

参考书: 《speech and language processing》《统计自然语言处理》 宗成庆 语言是思维的载体&#xff0c;自然语言处理相比其他信号较为特别 word2vec用到c语言 Question 预训练语言模型和其他模型的区别? 预训练模型是指在大规模数据上进行预训练的模型&#xff0c;通常…

计算机网络——21拥塞控制原理

拥塞控制原理 概述 拥塞 非正式的定义&#xff1a;“太多的数据需要网络传输&#xff0c;超过了网络的处理能力”与流量控制不同拥塞的表现 分组丢失&#xff08;路由器缓冲区溢出&#xff09;分组经历比较长时间的延迟&#xff08;在路由器的队列中排队&#xff09; 网络中…

如何解决机器视觉高速图像处理软件的加密需求?

高速图像处理在机器视觉中的应用重要性 在机器视觉行业中&#xff0c;高速图像处理软件的作用至关重要&#xff0c;它使得机器能够迅速分析和处理成千上万的图像数据。这种能力在制造业、安防系统、交通监控等多个领域发挥着核心作用&#xff0c;如在制造业中&#xff0c;高速…

ROS 2基础概念#2:节点(Node)| ROS 2学习笔记

ROS 2节点简介 节点是执行计算的进程。节点组合在一起形成一个图&#xff08;graph&#xff09;&#xff0c;并使用主题&#xff08;topic&#xff09;、服务&#xff08;service&#xff09;和参数服务器&#xff08;paramter server&#xff09;相互通信。这些节点旨在以细粒…

防御安全(第六次作业)笔记整理

攻击可能只是一个点&#xff0c; 防御需要全方面进行 IAE引擎 DFI和DPI技术 --- 深度检测技术 DPI --- 深度包检测技术 --- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09; &#xff0c;之后对 数据包的内容进行识别。&#xff08;应用层&am…

Django学习笔记-查询及修改MySQL数据库表的所有信息

1.在index中添加一个按钮,用于查询数据 2.urls配置find 3.views定义find,获取PopulationModel模型所有数据渲染到show.html页面上 4.创建show.html,遍历modellist的数据渲染到表格中显示 5.点击查询后页面显示如下 6.添加修改按钮,点击按钮,执行update,urls配置update …

在实训云平台上配置云主机

文章目录 零、学习目标一、实训云升级二、实训云登录&#xff08;一&#xff09;登录实训云&#xff08;二&#xff09;切换界面语言&#xff08;三&#xff09;规划云主机实例 三、创建网络三、创建路由器2024-2-29更新到此四、添加接口五、创建端口六、添加安全组规则七、创建…

风速预测(七)VMD-CNN-BiLSTM预测模型

目录 往期精彩内容&#xff1a; 前言 1 风速 VMD 分解与可视化 1.1 导入数据 1.2 VMD分解 2 数据集制作与预处理 3 基于Pytorch的VMD CNN-BiLSTM 预测模型 3.1 定义VMD CNN-BiLSTM预测模型 3.2 设置参数&#xff0c;训练模型 4 模型评估与可视化 4.1 结果可视化 4.2…