当前位置: 首页 > news >正文

python opencv的sift特征检测(Scale-Invariant Feature Transform)

sift

官方文档地址:https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html

  • 创建SIFT实例cv2.SIFT.create()
  • 特征检测sift.detect
  • 描述子sift.compute/sift.detectAndCompute
  • 画特征cv2.drawKeypoints

原图

在这里插入图片描述

特征点

在这里插入图片描述

代码

import cv2first = './12.png'
'''
sift 特征检测
官方文档地址:https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html
'''
if __name__ == "__main__":# 读取图片,转成灰度图img = cv2.imread(first)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 创建SIFT实例sift = cv2.SIFT.create()# 特征检测# sift.detect() function finds the keypoint in the images. You can pass a mask if you want to search only a part of image.# Each keypoint is a special structure which has many attributes like its (x,y) coordinates,# size of the meaningful neighbourhood, angle which specifies its orientation,# response that specifies strength of keypoints etc.kp = sift.detect(gray, None)print(f"关键点:{kp}")print(f"f关键点:{type(kp)}")print(f"f关键点:{len(kp)}")print(f"f关键点:{kp[0]}")# 画出关键点# DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS可以展示特征点的大小和方向img = cv2.drawKeypoints(gray, kp, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)cv2.imshow("sift", img)cv2.waitKey(0)cv2.destroyAllWindows()# kp, des = sift.compute(gray, kp) 用计算出来的特征点计算描述子# 或者直接计算特征点和描述子# Here kp will be a list of keypoints and des is a numpy array of shape: len(kp) X 128kp, des = sift.detectAndCompute(gray, None)# print(kp)# print(type(kp))# print(kp[0])print(des.shape)print(des[0])
关键点:(< cv2.KeyPoint 0x11f179110>, < cv2.KeyPoint 0x11f179140>, < cv2.KeyPoint 0x11f179470>, < cv2.KeyPoint 0x11f179560>, < cv2.KeyPoint 0x11f179530>, < cv2.KeyPoint 0x11f179500>, < cv2.KeyPoint 0x11f1794d0>, < cv2.KeyPoint 0x11f1794a0>, < cv2.KeyPoint 0x11f17a9d0>, < cv2.KeyPoint 0x11f228c60>, < cv2.KeyPoint 0x11f228c30>, < cv2.KeyPoint 0x11f2288a0>, < cv2.KeyPoint 0x11f228930>, < cv2.KeyPoint 0x11f2289c0>, < cv2.KeyPoint 0x11f2289f0>, < cv2.KeyPoint 0x11f228ab0>, < cv2.KeyPoint 0x11f22bed0>, < cv2.KeyPoint 0x11f244570>, < cv2.KeyPoint 0x11f2443c0>, < cv2.KeyPoint 0x11f2443f0>, < cv2.KeyPoint 0x11f244510>, < cv2.KeyPoint 0x11f2445a0>, < cv2.KeyPoint 0x11f244630>, < cv2.KeyPoint 0x11f244660>, < cv2.KeyPoint 0x11f244690>, < cv2.KeyPoint 0x11f2446c0>, < cv2.KeyPoint 0x11f2446f0>, < cv2.KeyPoint 0x11f244720>)
f关键点:<class 'tuple'>
f关键点:28
f关键点:< cv2.KeyPoint 0x11f179110>
(28, 128)
[  0.   0.   0.   0.   0.   0.   0.   2.   1.   0.   0.   0.   0.   3.25.  18.   0.   0.   0.   0.   0.  18.  23.   2.   0.   0.   0.   0.0.   2.   1.   1.  23.   0.   0.   0.   0.   0.   0.  10. 139.   2.0.   0.   6.  29.  81. 136.  13.   0.   0.   0. 106. 162.  82.  26.23.   0.   0.   0.  22.  16.   7.  36.  41.   4.   0.   0.   0.   0.0.   1. 162.  34.   0.   0.  26.  11.   5.  22.  71.   6.   0.   0.162.  83.   5.   7. 122.   7.   0.   0.  70.  11.   1.  17.  22.   3.0.   0.   0.   0.   0.   0. 162.  37.   0.   0.  15.   2.   0.   0.83.  10.   0.   0. 162.  36.   0.   0.  94.  11.   0.   0.  78.   9.0.   0.]

相关文章:

python opencv的sift特征检测(Scale-Invariant Feature Transform)

sift 官方文档地址&#xff1a;https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html 创建SIFT实例cv2.SIFT.create()特征检测sift.detect描述子sift.compute/sift.detectAndCompute画特征cv2.drawKeypoints 原图 特征点 代码 import cv2first ./12.pngsif…...

若依定时任务

表结构 目录 quartz框架 SysJobServiceImpl实现类 使用切点,在构造器执行的时候执行定时任务的构建(这个类是交给IOC容器的,所以这个时间点就是项目启动的时候)SysJobServiceImpl实现类的init方法创建任务 /*** 创建定时任务*/public static void createScheduleJob(Scheduler …...

k8s-node2 NotReady 节点NotReady如何解决?

从集群中移除 k8s-node2 [rootk8s-master ~]# kubectl delete node k8s-node2 node "k8s-node2" deleted重置 k8s-node2 登录到 k8s-node2 上&#xff0c;使用以下命令重置该节点&#xff0c;使其退出集群并恢复到初始状态&#xff1a; [rootk8s-node2 ~]# sudo k…...

Ubuntu通过mDNS实现局域网local域名和octoprint域名访问

OctoPrint是一个开源的3D打印机控制软件&#xff0c;它提供了一个Web界面&#xff0c;允许用户远程监控和管理3D打印机。通过USB连接到打印机后&#xff0c;用户可以使用任何带有Web浏览器的设备来控制打印作业&#xff0c;包括开始、停止、暂停打印&#xff0c;以及在打印过程…...

短视频矩阵账号管理技术源码搭建详解,支持OEM

一、引言 在短视频矩阵系统中&#xff0c;账号管理是至关重要的一环&#xff0c;它涉及到多平台账号的接入、用户信息的安全存储与高效管理、权限的精准控制以及账号数据的同步与更新等关键功能。一个健壮、灵活且安全的账号管理技术架构&#xff0c;能够为整个短视频矩阵系统的…...

【源码 导入教程 文档 讲解】基于springboot校园新闻管理系统源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xf…...

Spark SQL DML语句

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 Spark本地模式安装_spark3.2.2本地模式安装-CSDN博客 DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff09;操作主要用来对…...

开发微信小程序的过程与心得

起因 作为家长&#xff0c;我近期参与了学校的护学岗工作。在这个过程中&#xff0c;我发现需要使用水印相机来记录护学活动&#xff0c;但市面上大多数水印相机应用都要求开通会员才能使用完整功能。作为一名程序员&#xff0c;我决定利用自己的技术背景&#xff0c;开发一个…...

【1224】数据结构(sizeof/数组的长度定义/读取字符串函数/线性表长度/左值右值/静态变量/指针与引用)

1.对一维整型数组a的正确说明是 #define SIZE 10 (换行) int a[SIZE];说法是否正确&#xff1f; 正确 数组的SIZE可以用宏定义&#xff0c;但不能用变量 2.如有定义&#xff1a;char str[20];&#xff0c;能将从键盘输入的字符串“How are you”保存到 str 数组的语句是&#x…...

Android笔记(四十一):TabLayout内的tab不滚动问题

背景 假设二级页面是上面图片的布局&#xff0c;当进来时TabLayout和ViewPager2绑定完就马上调setCustomItem&#xff0c;跳转到最后一个tab页面时&#xff0c;会发现tab不滚动&#xff0c;手动滑一下ViewPager2时才会滚动tab到正确的位置 原因分析 调用TabLayoutMediator.at…...

基于pytorch的深度学习基础3——模型创建与nn.Module

三 模型创建与nn.Module 3.1 nn.Module 模型构建两要素&#xff1a; 构建子模块——__init()__拼接子模块——forward&#xff08;&#xff09; 一个module可以有多个module&#xff1b; 一个module相当于一个运算&#xff0c;都必须实现forward函数&#xff1b; 每一个mod…...

Debian-linux运维-docker安装和配置

腾讯云搭建docker官方文档&#xff1a;https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档&#xff1a;https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导&#xff1a;htt…...

Docker完整技术汇总

Docker 背景引入 在实际开发过程中有三个环境&#xff0c;分别是&#xff1a;开发环境、测试环境以及生产环境&#xff0c;假设开发环境中开发人员用的是jdk8&#xff0c;而在测试环境中测试人员用的时jdk7&#xff0c;这就导致程序员开发完系统后将其打成jar包发给测试人员后…...

在JavaScript文件中定义方法和数据(不是在对象里定以数据和方法,不要搞错了)

在对象里定以数据和方法看这一篇 对象字面量内定义属性和方法&#xff08;什么使用const等关键字&#xff0c;什么时候用键值对&#xff09;-CSDN博客https://blog.csdn.net/m0_62961212/article/details/144788665 下是在JavaScript文件中定义方法和数据的基本方式&#xff…...

python爬虫爬抖音小店商品数据+数据可视化

爬虫代码 爬虫代码是我调用的数据接口&#xff0c;可能会过一段时间用不了&#xff0c;欢迎大家留言评论&#xff0c;我会不定时更新 import requests import time cookies {token: 5549EB98B15E411DA0BD05935C0F225F,tfstk: g1vopsc0sQ5SwD8TyEWSTmONZ3cA2u6CReedJ9QEgZ7byz…...

关于 覆铜与导线之间间距较小需要增加间距 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144776995 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…...

在 Windows 上,如果忘记了 MySQL 密码 重置密码

在 Windows 上&#xff0c;如果忘记了 MySQL 密码&#xff0c;可以通过以下方法重置密码&#xff1a; 方法 1&#xff1a;以跳过权限验证模式启动 MySQL 并重置密码 停止 MySQL 服务&#xff1a; 打开 命令提示符 或 PowerShell&#xff0c;输入以下命令停止 MySQL 服务&#…...

《PyTorch:从基础概念到实战应用》

《PyTorch&#xff1a;从基础概念到实战应用》 一、PyTorch 初印象二、PyTorch 之历史溯源三、PyTorch 核心优势尽显&#xff08;一&#xff09;简洁高效&#xff0c;契合思维&#xff08;二&#xff09;易于上手&#xff0c;调试便捷&#xff08;三&#xff09;社区繁荣&#…...

前端:改变鼠标点击物体的颜色

需求&#xff1a; 需要改变图片中某一物体的颜色&#xff0c;该物体是纯色&#xff1b; 鼠标点击哪个物体&#xff0c;哪个物体的颜色变为指定的颜色&#xff0c;利用canvas实现。 演示案例 代码Demo <!DOCTYPE html> <html lang"en"><head>&l…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...