ORB+FLANN

news2025/1/31 2:47:41

FLANN 代表 近似最近邻的快速库。它包含针对大型数据集中的快速最近邻搜索和高维特征优化的算法集合。对于大型数据集,它比BFMatcher工作得更快。

对于基于 FLANN 的匹配器,我们需要传递两个字典,指定要使用的算法、相关参数等。第一个是IndexParams。对于各种算法,要传递的信息在 FLANN 文档中进行了解释。作为总结,对于SIFT,SURF等算法。您可以通过以下内容:

# SIFT,SURF

FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)

使用 ORB 时,可以传递以下内容。根据文档,建议使用注释值,但在某些情况下,它没有提供所需的结果。其他值工作正常。

FLANN_INDEX_LSH = 6
index_params= dict(algorithm = FLANN_INDEX_LSH,
 table_number = 6, # 12
 key_size = 12, # 20
 multi_probe_level = 1) #2

代码如下:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt


img1 = cv.imread('./data/box.png',cv.IMREAD_GRAYSCALE) # queryImage
img2 = cv.imread('./data/box_in_scene.png',cv.IMREAD_GRAYSCALE) # trainImage

# Initiate SIFT detector
orb = cv.ORB_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

# FLANN parameters
# FLANN_INDEX_KDTREE = 1
# index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)

FLANN_INDEX_LSH = 6
index_params= dict(algorithm = FLANN_INDEX_LSH,
 table_number = 6, # 12
 key_size = 12, # 20
 multi_probe_level = 1) #2

search_params = dict(checks=50) # or pass empty dictionary
flann = cv.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)

# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]
# ratio test as per Lowe's paper

for i,(m,n) in enumerate(matches):
    if m.distance < 0.8*n.distance:
        matchesMask[i]=[1,0]
    
draw_params = dict(matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = cv.DrawMatchesFlags_DEFAULT)
img3 = cv.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)
plt.imshow(img3,),plt.show()

在这里插入图片描述

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

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

相关文章

2024考研408-操作系统 第三章-内存管理 学习笔记

文章目录 一、内存管理基础1.1、内存的基础知识1.1.1、什么是内存&#xff1f;有何作用&#xff1f;1.1.2、进程运行的基本原理1.1.2.1、指令的工作原理1.1.2.2、理解逻辑地址与物理地址1.1.2.3、从写程序到程序运行1.1.2.4、三种链接方式&#xff08;静态、转入时动态、运行时…

openssl源码编译输出库-guidance-傻瓜式教程

目标&#xff1a; 下载openssl源码 编译输出目标版本&#xff0c;例如使用Android NDK编译输出Android使用的32位的库 1、下载源码 git clone https://github.com/openssl/openssl.git -b openssl-3.0.9 2、 请下载Linux版本的Android NDK 请下载Linux版本的Android NDK, 并完…

没看完这篇文章,别说你会用Ping

中午好&#xff0c;我的网工朋友。 网工生活里每天都和ping打交道&#xff0c;ping来ping去&#xff0c;很多人知道ping&#xff0c;却不知道怎么把ping用出更多花样出来。 今天&#xff0c;我特地给你关于ping命令的使用大全&#xff0c;在更多不同的项目场景里&#xff0c;…

解决访问127.0.0.1时,提示“127.0.0.1 拒绝了我们的连接请求”

目录 问题描述 解决方案 问题描述 我电脑是win10系统&#xff0c;刚刚在访问http://127.0.0.1时&#xff0c;浏览器显示“127.0.0.1 拒绝了我们的连接请求”&#xff0c;为何访问本机IP显示拒绝访问&#xff1f; 解决方案 1. windows徽标 I 打开设置&#xff0c;选择“应用…

3ds max高级教程:创建带有骨骼动画的机器人模型

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 然而&#xff0c;下面我们示例机器人腿的第一个版本不是很现实&#xff0c;因为它会像没有肌肉的骨骼结构一样坍塌。在第二个版本中&#xff0c;我们将添加一些机器人“肌肉”&#xff0c;第三个版本将包括…

分布式运用存储系统Ceph

一、ceph的相关知识 1.ceph介绍与简介 Ceph是一个开源的分布式存储解决方案&#xff0c;旨在提供可扩展性、高性能和强大的数据可靠性。它采用了一种分布式对象存储架构&#xff0c;能够同时提供块存储和文件存储的功能。 Ceph使用C语言开发&#xff0c;是一个开放、自我修复和…

Makefile文件编写

文章目录 格式自动检查更新效率变量模式匹配函数clean 格式 目标&#xff1a;依赖 tab 命令 自动检查更新 当有文件发生修改后&#xff0c;重新make会自动对发生修改的依赖进行编译 效率 由于在 make时会进行检查更新&#xff0c;对于有修改的依赖会重新编译&#xff0c;为…

定位理论:引领企业变革的幕后推手

在商业的海洋中&#xff0c;如何能让你的企业像一座明亮的灯塔&#xff0c;独特而引人注目?这就需要我们掌握一种强大的工具——定位理论。那么&#xff0c;定位理论究竟是什么?我们为什么要学习它?它如何能为我们的企业创造价值?今天&#xff0c;让我们一起深入探索定位理…

vue3组件引用使用的坑

今天准备用el-tabs写个页面&#xff0c;发现点击后组件怎么都显示不了&#xff0c;后来才发现是组件引用的原因 这是页面是显示的效果&#xff1a; 乍一看确实是对的。。。 但是当我点击完这三个tab后再重新点击道路管理后&#xff0c;有意思的出现了&#xff1a; one组件消失…

UE4/5AI制作基础AI(适合新手入门,运用黑板,行为树,ai控制器,角色类,任务)

目录 制作流程 第一步&#xff1a;创建资产 然后创建一个AIController 之后创建一个黑板和行为树&#xff1a; 第二步&#xff1a;制作 黑板 行为树 任务 运行行为树 结果 制作流程 第一步&#xff1a;创建资产 第一步直接复制你的人物蓝图&#xff0c;做一个npc&…

【网关】ShenYu Gateway入门Demo体验,ShenYu网关2.6.0直接调用Dubbo服务

本次为新开源框架接入ShenYu网关做基础学习指导&#xff0c;特地来下载官网的demo体验一把&#xff0c;具体是想通过网关泛化调用dubbo服务。本次使用的是最新版本2.6.0。 官网文档&#xff1a; 如何通过 Apache ShenYu 网关代理 Dubbo 服务 | Apache Dubbo 环境准备 第一步&a…

nvm安装和使用,对node.js版本进行切换控制

文章目录 前言一、nvm是什么&#xff1f;二、安装三、nvm命令说明nvm ls&#xff08;查看已安装版本&#xff09;nvm list available&#xff08;查看可下载安装的最新版本列表&#xff09;nvm current&#xff08;查看当前使用的版本&#xff09;nvm install&#xff08;下载安…

【Linux】网络基础之UDP协议

目录 &#x1f308;前言&#x1f338;1、传输层&#x1f33a;2、重谈端口号&#x1f368;2.1、端口号范围划分&#x1f367;2.2、认识知名端口号 &#x1f340;3、UDP协议&#x1f368;3.1、UDP协议报文结构&#x1f369;3.2、UDP协议的特点&#x1f36a;3.3、基于UDP的应用层协…

SQL篇-03_SQL必知必会-13_组合查询

SQL106 将两个 SELECT 语句结合起来&#xff08;一&#xff09; 描述 表OrderItems包含订单产品信息&#xff0c;字段prod_id代表产品id、quantity代表产品数量 prod_id quantity a0001 105 a0002 100 a0002 200 a0013 1121 a0003 10 a0003 19 a0003 5 BNBG 10002 【问题】将两…

移动卫生间有人无人自动采集方案

互联网和物联网技术的不断普及&#xff0c;以及新技术的不断更新迭代&#xff0c;为我们的生活带来了诸多便利和改变。在这个信息时代&#xff0c;我们希望通过采用更先进的技术来建设智慧厕所&#xff0c;以满足人们对卫生设施的高品质需求。其中&#xff0c;物联网技术、传感…

python和pip安装+flask基本用法小白教程

安装python 3.8.2&#xff1a; 直接点击下方链接下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/11Jo1I8GjnKQSgIv-5xSrTw 提取码&#xff1a;hg5h 安装pip&#xff1a; 在下载安装完python配置完环境变量后&#xff0c;打开cmd输入下面命令&#xff1a; pyt…

一文了解什么是ISO 9001认证,以及在静态分析和代码质量领域有哪些通过此认证的工具

ISO 9001是一个国际标准&#xff0c;被广泛应用于不同规模、不同类型的企业&#xff0c;它为企业的质量管理体系&#xff08;QMS&#xff09;提供了具体的要求和标准。 最新版本的ISO 9001发布于2015年&#xff0c;旨在帮助企业改善客户体验、满足法规要求、管理供应商和合作伙…

基于STM32设计的老人监护系统

一、设计需求 1.1 项目背景 21世纪以来,随着科技的发展,在人们的生活水平不断的提升的同时中国老龄化人口问题日益严重,再加上社会经济的发展。许多子女外出打工,使得越来越多的空巢老人得不到及时有效的关心与治疗。因此,本系统以老人为中心,并设定出许多相关的功能监…

Java 并发编程

一、开篇 本篇只要是对Java基础中的并发编程进行巩固、知识回顾。 几乎所有的资料在讲述本篇时都是先讲一下进程和线程的区别。在此将不详细介绍&#xff0c;只介绍了解以下几点区别&#xff1a; 1、进程大、线程小&#xff0c;一个程序至少有一个进程&#xff0c;一个进程至…

原型模式-克隆一个对象

在开发一个界面的时候&#xff0c;里面有多个Button&#xff0c;这些对象的属性内容相似。如果一个个实例化Button对象&#xff0c;并设置其属性&#xff0c;那么代码量将会增多。 通过一个原型对象克隆出多个一模一样的对象&#xff0c;该模式被称为原型模式。 图 原型模式 …