PCA 在图像分析上的应用
同一物体旋转角度求取
直接上代码:
import cv2, os
import numpy as np
import timedef perform_pca(image, num_components):# 将图像转换为浮点型img_float = np.float32(image)img_flatten = img_float.reshape(-1, 2)# 计算均值和协方差矩阵mean, eigenvectors = cv2.PCACompute(img_flatten, mean=None, maxComponents=num_components)return mean, eigenvectorsdef rotate_coords(coords, theta):"""绕原点旋转坐标点集。参数:coords: 坐标点集,每个元素是一个(x, y)的元组。theta: 旋转角度,以弧度为单位。返回:旋转后的坐标点集。"""# 定义旋转矩阵rotation_matrix = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])# 将坐标点集转换为NumPy数组以便进行矩阵运算coords_array = np.array(coords)# 应用旋转矩阵rotated_coords = np.dot(coords_array, rotation_matrix)return rotated_coordsdef judge_direction1(mean, vector, center_x, center_y):v = np.array([center_x - mean[0][0], center_y - mean[0][1]])if np.dot(v, vector) < 0:vector = -vectorreturn vectordef judge_direction2(mean, vector, image, img_path):edge_image = cv2.Canny(image, 50, 200)file_name = img_path.split("/")[-1]save_path = "/home/xxx/下载/mask/result/"x_angle = vector_angle(vector,np.array([1, 0]))edge_non_zero_coords = cv2.findNonZero(edge_image)edge_non_zero_coords = edge_non_zero_coords - mean[0]edge_non_zero_coords = rotate_coords(edge_non_zero_coords, np.radians(x_angle))min_x, min_y = np.min(edge_non_zero_coords, axis=0)[0]max_x, max_y = np.max(edge_non_zero_coords, axis=0)[0]new_image = np.zeros((int(max_y-min_y)+1, int(max_x - min_x)+1), np.uint8)for coord in edge_non_zero_coords:x, y = coord[0]new_image[int(y - min_y), int(x - min_x)] = 255# cv2.imwrite(save_path + file_name, new_image)if max_x - min_x > max_y - min_y:if abs(max_x) > abs(min_x):vector = -vectorelse:if abs(max_y) > abs(min_y):vector = -vectorreturn vectordef get_vector(img_path):image = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)h, w = image.shapecenter_x = int(w / 2)center_y = int(h / 2)non_zero_coords = cv2.findNonZero(image)# 执行PCAnum_components = 2mean, eigenvectors = perform_pca(non_zero_coords, num_components)vector = eigenvectors[0]vector = judge_direction2(mean, vector, image, img_path)return vectordef vector_angle(v1, v2):# 计算点积dot_product = np.dot(v1, v2)# 计算向量的模norm_v1 = np.linalg.norm(v1)norm_v2 = np.linalg.norm(v2)# 计算余弦值cos_theta = dot_product / (norm_v1 * norm_v2)# 计算弧度制的夹角theta_rad = np.arccos(np.clip(cos_theta, -1.0, 1.0))# 将弧度制转换为角度制theta_deg = np.degrees(theta_rad)# 确定角度的方向性cross_product = np.cross(v1, v2)if cross_product < 0:theta_deg = 360 - theta_degreturn 360 - theta_degdef get_angle(img_path1, img_path2):vector1 = get_vector(img_path1)vector2 = get_vector(img_path2)angle = vector_angle(vector1, vector2)print(vector1, vector2, angle)return angleif __name__ == "__main__":img_path1 = "/home/xxx/下载/mask/mask3/0.jpg"img_path2 = "/home/xxx/下载/mask/mask3/32.jpg"get_angle(img_path1, img_path2)
相关文章:
PCA 在图像分析上的应用
同一物体旋转角度求取 直接上代码: import cv2, os import numpy as np import timedef perform_pca(image, num_components):# 将图像转换为浮点型img_float np.float32(image)img_flatten img_float.reshape(-1, 2)# 计算均值和协方差矩阵mean, eigenvectors …...
springboot项目mapper无法自动装配,未找到 ‘userMapper‘ 类型的Bean解决办法.
一开始我看到了这个回答:springboot项目mapper无法自动装配,未找到 ‘userMapper‘ 类型的 Bean解决办法(含报错原因)_无法自动装配。找不到 usermapper 类型的 bean。-CSDN博客 mapper无法自动装配,未找到 ‘userMap…...
TC3xx A\B SWAP机制的小细节(2)
目录 1.引入 2.TC3xx Swap机制小细节 3.小结 1.引入 上文TC3xx A\B SWAP机制的小细节(1)-CSDN博客主要把OTA的概念,以及MCU的硬件A\B Swap机制做了简单介绍,下面我们来聊聊TC3xx的SWAP机制 2.TC3xx Swap机制小细节 英飞凌TC3xx提供了硬件SOTA机制&…...
双绞线(网线)的制作与测试
实验目的 1、熟悉常用双绞线(网线)及其制作工具的使用; 2、掌握非屏蔽双绞线的直通线、交叉线的制作及连接方法; 3、掌握双绞线连通性的测试。 设备要求:RJ45压线钳,RJ45水晶头,UTP线缆&…...
高效处理海量慢SQL日志文件:Java与JSQLParser去重方案详解
在大数据处理环境下,慢SQL日志优化是一个必要的步骤,尤其当日志文件达到数GB时,直接操作日志文件会带来诸多不便。本文将介绍如何通过Java和JSQLParser库来解析和去重慢SQL日志,以提高性能和可维护性。 背景 公司生产环境中&…...
企业内部、与合作伙伴/客户文档协作如何高效安全地收集资料?
在企业的日常运营与对外合作中,「文件收集」是一项特别常见的文档协作需求。例如,公司举办项目经验分享大会,组织者需要提前收集演讲者的材料;新项目启动时,项目经理需要快速收集技术方案和报价方案以便招投标和商务活…...
用Unity创造自己的绿洲
“谢谢你能玩我的游戏!” 希望将来我也能做出一款影响全世界的游戏,就比如现在的《英雄联盟》,或是电影里的《绿洲》!然后也说出这么一句话:谢谢你能玩我的游戏! 阶段性的总结一下 那就展示一下最近完成的…...
服务器数据恢复—KVM虚拟机被误删除如何恢复虚拟磁盘文件?
服务器数据恢复环境&故障: 1台服务器,Linux操作系统EXT4文件系统,部署了数台KVM虚拟机,每台虚拟机包含一个qcow2格式的磁盘文件,和一个raw格式的磁盘文件。 工作人员操作失误删除了3台服务器上的KVM虚拟机…...
工具清单 - 看板工具
# 工具清单 Crepido在新窗口打开 - Create (kanban) boards to track users and projects from flat markdown files. MIT NodejsKanboard在新窗口打开 - Simple and open source visual task board. (Source Code在新窗口打开) MIT PHPmyTinyTodo在新窗口打开 - Simple way t…...
Go微服务: 分布式之发送带有事务消息的示例
分布式之发送带有事务消息 现在做一个RocketMQ的事务消息的 demo 1 )生产者 package mainimport ("context""fmt""time""github.com/apache/rocketmq-client-go/v2""github.com/apache/rocketmq-client-go/v2/prim…...
【go】go初始化命令总结
包初始化 test项目目录下执行 go mod init test go mod tidy生成二进制可执行文件 go build -o test .\main.go...
vue音乐播放条
先看效果 再看代码 <template><div class"footer-player z-30 flex items-center p-2"><div v-if"isShow" class"h-12 w-60 overflow-hidden"><div :style"activeStyle" class"open-detail-control-wrap&…...
halcon实现浓淡补正,中间值补正-抽取暗
代码效果 抽取前 中值抽取暗 halcon函数代码 测试图片参数 NoiseCut:16 Gain:1 输入ImagePart NoiseCut Gain *获取直方图 get_domain (ImagePart, Domain) gray_histo_range(Domain,ImagePart,0,255,256, Histo, BinSize) area_center(Domain, NumPixels, Row, Column) …...
太速科技-FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡
FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡 一、板卡概述 该板卡为了考虑兼容1.8V电平IO,适配Virtex7,Kintex Ultrascale,Virtex ultrasacle FPGA而特制,如果要兼容原来的3.3V 也可以修改硬件参数。板卡支持1路…...
GPU短缺和模型效率的推动
1. 引言 随着全球GPU短缺和云计算成本的不断上升,开发更高效的AI模型成为了当前的焦点。技术如低秩适应(LoRA)和量化(Quantization)在优化性能的同时,减少了资源需求。这些技术不仅在当前的AI开发中至关重…...
linux在文件夹中查找文件内容
linux在文件夹中查找文件内容 在Linux中,可以通过以下多个途径,在文件夹中查找文件内容: 1、使用grep命令: grep -r "要查找的内容" /path/to/folder-r参数表示递归地在文件夹及其子文件夹中搜索。/path/to/folder是要搜索的文件夹路径。2、使用ack命令 ack …...
算法:11. 盛最多水的容器
11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你…...
Hazelcast 分布式缓存 在Seatunnel中的使用
1、背景 最近在调研seatunnel的时候,发现新版的seatunnel提供了一个web服务,可以用于图形化的创建数据同步任务,然后管理任务。这里面有个日志模块,可以查看任务的执行状态。其中有个取读数据条数和同步数据条数。很好奇这个数据…...
分数限制下,选好专业还是选好学校?
目录 分数限制下,选好专业还是选好学校? 方向一:专业解析 1. 专业选择的重要性 2. 不同专业的优势与挑战 3. 个人专业选择经验分享 4. 实际场景下的“专业VS学校”选择方案 方向二:名校效应分析 1. 名校声誉与品牌效应 2…...
软件改为开机自启动
1.按键 win R,输入“shell:startup”命令, 然后就可以打开启动目录了,如下: 2.然后,把要开机启动的程序的图标拖进去即可。 参考:开机启动项如何设置...
集群down机的应急和恢复测试(非重做备机)
1. 集群的两台服务器的状态 实例 正常情况主备 ip 端口 node1 主机 192.168.6.6 9088 node2 备机 192.168.6.7 9088 2. 测试的步骤 down掉node1观察node2的状态在node2未自动切换的时候手动将node2调整为单机状态,模拟紧急使用模拟不紧急时࿰…...
【数据库系统概论复习】关系数据库与关系代数笔记
文章目录 基本概念数据库基本概念关系数据结构完整性约束 关系代数关系代数练习课堂练习 语法树 基本概念 数据库基本概念 DB 数据库, 为了存用户的各种数据,我们要建很多关系(二维表),所以把相关的关系(二…...
赛氪网受邀参加上海闵行区翻译协会年会,共探科技翻译创新之路
在科技飞速发展的时代背景下,翻译行业正面临着前所未有的机遇与挑战。作为连接高校、企业与社会的桥梁,赛氪网在推动翻译创新、促进学术交流方面展现出了独特的魅力。2024年6月9日,在华东师范大学外语学院举办的第十三届上海市闵行区翻译协会…...
项目管理进阶之EVM(挣值管理)
前言 项目管理进阶系列,终于有时间更新啦!!!欢迎持续关注哦~ 上一节博主重点讲了一个环:PDCA,无论各行各业,上到航空航天、下到种地种菜,都离不开对质量的监督和改进。这个环既是一…...
PLSQL、Oracle以及客户端远程连接服务器笔记(仅供参考)
1.PLSQL参考链接: 全网最全最细的PLSQL下载、安装、配置、使用指南、问题解答,相关问题已汇总-CSDN博客文章浏览阅读2.9w次,点赞98次,收藏447次。双击之后,这里选择安装目录,你安装目录选的哪里࿰…...
Win快速删除node_modules
在Windows系统上删除 node_modules 文件夹通常是一个缓慢且耗时的过程。这主要是由于几个关键因素导致的: 主要原因 文件数量多且嵌套深: node_modules 文件夹通常包含成千上万的子文件夹和文件。由于其结构复杂,文件和文件夹往往嵌套得非常…...
【机器学习】基于顺序到顺序Transformer机器翻译
引言 1.1 序列到序列模型详解 序列到序列(Seq2Seq)模型是深度学习中处理序列数据转换问题的关键架构。在自然语言处理(NLP)任务中,如机器翻译、文本摘要和聊天机器人等,Seq2Seq模型能够高效地将输入序列转换为期望的输出序列。 模型架构: 编…...
TEA 加密的 Java 实现
import java.nio.ByteBuffer; import java.nio.ByteOrder;public class TeaUtils {private static final int DELTA 0x9E3779B9;private static final int ROUND 32;private static final String KEY "password";/*** 加密字符串,使用 TEA 加密算法*/p…...
鸿蒙开发电话服务:【@ohos.telephony.data (蜂窝数据)】
蜂窝数据 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import data from ohos.telephony.data;data.getDefaultCellularDataSlotId getDefaultCellularDataSlotId(callback: Async…...
Maven认识与学习
1. Maven介绍 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 官网:Maven – Welcome to Apache Maven Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受…...
东阳科技网站建设/网络营销和市场营销的区别
通过昨天晚上的研究,让我对group by等函数感到很多的不解。对于其的用法感到很困惑。学而不思则罔,思而不学则殆。动手研究,今天先进行一点。 SQL> select * from emp 2 ; EMPNO ENAME JOB MGR HIREDATE SAL …...
php程序员网站开发建设/济南网站seo哪家公司好
——为了今天要写的内容,运行了将近7个小时的程序,在数据库中存储了1千万条数据。—— 今天要说的是mysql数据库的IF()函数的一个实例。具体场景如下,先看看表结构:CREATE TABLE message (id varchar(30) NOT NULL,title varchar(30) DEFAULT…...
互联网设计师leader/天津网站优化
题目一:一个有10亿条记录的文本文件,已按照关键字排好序存储,设计算法,可以快速的从文件中查找指定关键字的记录答案:10亿在 G量级, 分成100份, 为10M量级, 基本上放入内存无压力了.在这10亿记录中, 均分为100份, 把每…...
深圳网站制作公司兴田德润电话多少/nba排名赛程
逻辑雏形 根据老师讲解的思路,梳理出程序运行的逻辑雏形如下: 搞一个多维数组HC,用来存储我们这里 n(每) 个节点的哈夫曼编码搞一个数组cd,用来存储我们这里每个节点是前面一位的左子树(0)还是右子树&…...
如何对现有的网站改版/内容营销
本文来自老男孩老师第三本书籍著作《老男孩的MySQL私房菜》第三章内容分享!3.1 MySQL数据库的安装方法及选择在当今的互联网企业里,MySQL数据库大多运行在Linux系列操作系统上,当然,你也可以运行在Windows/Unix等商业操作系统上&a…...
营口网站建设哪家好/搜易网提供的技术服务
本实用新型属于计算机技术领域,具体涉及一种计算机组装系统用主板连接架。背景技术:电脑机箱主板,又叫主机板(mainboard)、系统板(systemboard)或母板(motherboard);它分为商用主板和工业主板两种,它安装在机箱内&…...