opencv 进阶15-检测DoG特征并提取SIFT描述符cv2.SIFT_create()

news2024/11/23 6:49:12

前面我们已经了解了Harris函数来进行角点检测,因为角点的特性,这些角点在图像旋转的时候也可以被检测到。但是,如果我们放大或缩小图像时,就可能会丢失图像的某些部分,甚至有可能增加角点的质量。这种损失的现象需要一种与图像比例无关的角点检测方法来解决。

SIFT(Scale-Invariant Feature Transform)尺度不变特征变换可以解决这个问题。

注意: SIFT 并不检测关键点(关键点由Difference of Gaussians检测),SIFT会通过一个特征向量来描述关键点周围区域的情况。DoG操作的最终结果会得到感兴趣的区域(关键点),这将通过SIFT来进行说明。

函数说明:

sift =cv2.SIFT_create([, nfeatures[, nOctaveLayers[,
contrastThreshold[, edgeThreshold]]]])

参数

  • nfeatures: 保留的最佳功能的数量。这些特征按其分数排名(在SIFT算法中作为局部对比度测量)。

  • nOctaveLayers:每个八度中的层数。3是D.Lowe(原作者)论文中使用的值。八度的数量是根据图像分辨率自动计算的。

  • contrastThreshold:用于过滤掉半均匀(低对比度)区域中的弱特征的对比度阈值。阈值越大,检测器产生的特征越少。应用过滤时,对比度阈值将被nOctaveLayers除。当nOctaveLayers设置为默认值并且如果要使用D.Lowe论文中使用的值0.03时,请将此参数设置为0.09。

  • edgeThreshold:用于过滤边缘特征的阈值。请注意,其含义与contrastThreshold不同,即edgeThreshold越大,滤除的特征越少(保留的特征越多)。

返回值

  • sift:实例化一个sift特征检测器。

示例:对图像检测DoG特征并提取SIFT描述符

实验原图:

在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('images\\sumian.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

sift = cv2.xfeatures2d.SIFT_create()
keypoints, descriptor = sift.detectAndCompute(gray, None)

img = cv2.drawKeypoints(image= img, outImage= img, keypoints= keypoints, flags= cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, color= (0, 0, 255))

cv2.imshow('sift', img)
cv2.waitKey()
cv2.destroyAllWindows()

发现是,如果你沿用之前的代码即

descriptor = cv2.xfeatures2d.SIFT_create()

会出现一个warning,但不影响结果。

[ WARN:0@0.037] global shadow_sift.hpp:15 cv::xfeatures2d::SIFT_create DEPRECATED: cv.xfeatures2d.SIFT_create() is deprecated due SIFT tranfer to the main repository. https://github.com/opencv/opencv/issues/16736

这是因为新版本的SIFT可以直接引用,不再需要安装contrib包,即

descriptor = cv2.SIFT_create()

官方公告可参见 OpenCV Google Summer of Code 2020

在这里插入图片描述

新代码如下:

import cv2


img = cv2.imread('images\\sumiao.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#sift = cv2.xfeatures2d.SIFT_create()
sift = cv2.SIFT_create()
keypoints, descriptor = sift.detectAndCompute(gray, None)

img = cv2.drawKeypoints(image= img, outImage= img, keypoints= keypoints, flags= cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, color= (0, 0, 255))

cv2.imshow('sift', img)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纯js封装一个弹出窗口

先上效果图: 左图是默认的样式(默认标题是黑色的。不是橙色的。截图时我改了点东西所以变了色。。。)。右图是通过传递参数自定义了外观的样式。 封装实现: function showWindow() {this.rnd Math.random();this.obj null;this.title ;this.content …

NER(命名实体识别)的介绍与使用--附源码

概述 本文将向您简要介绍命名实体识别,这是一种用于识别文本文档中存在的实体的流行方法。本文针对 NLP 领域的初学者。在本文末尾,已经实现了预训练的 NER 模型来展示实际用例。 为什么是NER? 图1 通过观察上

排序算法之详解选择排序

引入 选择排序顾名思义是需要进行选择的,那么就要问题了,选择到底是选择什么呢?选择排序的选择是选择数组中未排序的数组中最小的值,将被选择的元素放在未排序数组的首位 如果你对 ‘未排序数组’ , ‘选择’ 的概念不理解&#…

C++中机器人应用程序的行为树(ROS2)

马库斯布赫霍尔茨 一、说明 以下文章为您提供了对机器人应用程序或框架中经常使用的行为树的一般直觉:ROS,Moveit和NAV2。了解行为 Tress (BT) 框架的原理为您提供了在游戏领域应用知识的绝佳机会。BT可以与Unity或Unreal集成。 由…

淘宝有哪些值得抓取的数据?通过API可以获取到哪些数据?

淘宝是中国最大的在线购物平台,有丰富的数据可供抓取。以下是一些值得抓取的数据以及通过API可以获取到的数据: 1. 商品信息:包括商品标题、价格、销量、评价等。 2. 店铺信息:包括店铺名称、店铺信用、开店时间等。 3. 物流信…

java测试抽红包接口概率《搬代码》

1.首先我们进行抽红包概率测试的时候,为了测试抽取红包的概率完全正确。个人建议不使用线程池多线程执行,建议直接使用for循环执行 2.我们调取抽红包接口返回的信息值进行判断 3.下面就是判断代码,然后是抽红包接口代码 Test public static …

探索智能文字识别:技术、应用与发展前景

探索智能文字识别:技术、应用与发展前景 前言一张图全览大赛作品解读随心记你不对我对小结 智能文字识别体系化解读图像预处理文字定位和分割文字区域识别图像校正字体识别和匹配结果后处理小结 如何应对复杂场景下挑战复杂场景应对方法小结 人才时代对人才要求合合…

源代码审计对企业有哪些好处?

源代码扫描 源代码扫描,对应用程序进行静态漏洞扫描,分析源代码中存在的安全风险,运行应用于模拟器中对应用进行实时漏洞攻击检测。 你是否了解源代码扫描对企业的好处? 一、源代码扫描,通常能够帮助企业解决这些问题…

docker 01(初识docker)

一、docker概念 Docker是一个开源的应用容器引擎;诞生于2013年初,基于Go 语言实现,dotCloud公司出品(后改名为Dockerlnc);Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux …

KCC@杭州-在初秋,来一场智力与体能的比拼

本次主题: 开源知识问答桌游/运动(一场智力与体力的比拼) KCC杭州活动又来啦! 在这个如火的八月,我们将要开启KCC杭州的一场特色开源活动。 为了让活动更加有趣味,更加具有互动性,我们将采用知识…

QTreeWidget和QTreeWidgetItem

QTreeWidget介绍 QTreeWidget 是一个用于显示层次结构数据的 Qt 控件,它以树状结构的形式展示项目和子项。每个项目都可以包含子项,并且可以通过展开和折叠来浏览整个树。 QTreeWidget类是一个方便的类,它提供了一个带有经典基于项目的界面…

AI极客日报0822 - AI创作是否应该有版权?

👀AI 日报合集 | 🧡 点赞关注评论拜托啦! 人工智能系统依法享有版权吗?这位法官给出了肯定的答案。让我们开始吧。 今日看点: 一位联邦法官明确表示,AI创作的艺术品没有版权!中国&#xff0c…

WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集

野火 ATGM332D简介 高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源!共六款软件,学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/for…

静态代码扫描工具 Sonar 配置及使用

概览 Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代…

定向流量卡怎么没人买了呢?你知道定向流量卡有多坑吗?

在购买流量卡的时候大家可能都注意了,市面上的流量卡有三种,定向流量卡,通用流量卡,通用流量定向流量卡,据小编了解,现在越来越多的人比较喜欢购买后两者,而关注定向流量卡越来越少了。 其实用过…

中国移动秋招攻略,网申测评和面试

中国移动秋招简介 按照往年的惯例来看,移动会在每年的8月份发布相关秋招信息,紧接着考生并进行网申,面试的时间跨度也非常的长,大概是9~12月份。整个招聘流程,包括投递简历网申,笔试测评,面试录…

SQL Server、MySQL和Oracle数据库分页查询的区别与联系

摘要:本文将通过一个现实例子,详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例,并解释每个数据库的分页查询用法以及优化方法,帮助读者更好地选择适合自…

大白话聊聊Innodb的锁机制

大白话聊聊Innodb的锁机制 引言理清 "锁" 类型锁锁的类型非锁定读(MVCC)锁定读用来保护 "自增长计数器" 的锁外键和锁 加锁算法精确匹配查询如何关闭Gap Lock小结 幻读问题小结 锁问题脏读不可重复读丢失更新 阻塞死锁死锁发生概率死锁案例 锁升级小结 引言…

go 微服务 consul

服务发现 在微服务中每一个服务都有一个ip端口,如果由客户端来之间进行连接会不方便,因此服务将自己的ip端口提交给服务发现(常见的有consul,etcd,nacos),客户端通过服务发现来获取服务的ip端口 consul 去下载&…

Serialize对象二进制序列化与反序列化存储参数代替ini文件

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在C#中,可以使用System.Runtime.Serialization命名空间中的类来进行序列化操作。 以下是在C#中使用序列化的基本步骤: 创建一个可序列化的类,并标记该类和需要序列化的属性或字段…