opencv特征匹配

news2025/1/13 17:44:08
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)

Brute-Force蛮力匹配

import cv2 
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img1 = cv2.imread('box.png', 0)
img2 = cv2.imread('box_in_scene.png', 0)
def cv_show(name,img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# crossCheck表示两个特征点要互相匹,例如A中的第i个特征点与B中的第j个特征点最近的,并且B中的第j个特征点到A中的第i个特征点也是 
#NORM_L2: 归一化数组的(欧几里德距离),如果其他特征计算方法需要考虑不同的匹配计算方式
bf = cv2.BFMatcher(crossCheck=True)

1对1的匹配

matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None,flags=2)
cv_show('img3',img3)

k对最佳匹配

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)


good = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        good.append([m])

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)

cv_show('img3',img3)

如果需要更快速完成操作,可以尝试使用cv2.FlannBasedMatcher

随机抽样一致算法(Random sample consensus,RANSAC)

 选择初始样本点进行拟合,给定一个容忍范围,不断进行迭代

 每一次拟合后,容差范围内都有对应的数据点数,找出数据点个数最多的情况,就是最终的拟合结果

单应性矩阵 

 

 

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

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

相关文章

容器和云原生(三):kubernetes搭建与使用

目录 单机K8S docker containerd image依赖 kubeadm初始化 验证 crictl工具 K8S核心组件 上文安装单机docker是很简单docker&#xff0c;但是生产环境需要多个主机&#xff0c;主机上启动多个docker容器&#xff0c;相同容器会绑定形成1个服务service&#xff0c;微服务…

新书上市----Pytest企业级应用实战 新书上市

【原文链接】新书上市----Pytest企业级应用实战 新书上市 《Pytest企业级应用实战》 京东购书链接 当当购书链接 天猫购书链接 作者简介 本书作者本硕毕业于哈尔滨工业大学&#xff0c;曾先后就职于中兴通讯和华为&#xff0c;现任职于中科南京软件技术研究院&#xff0c;…

职业学院物联网实训室建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…

Educational Codeforces Round 62 (Rated for Div. 2) C. Playlist

一开始肯定要排个序&#xff0c;b相同时t大的在前边&#xff0c;不同时b大的在前面。 然后想最多只能选k个的限制&#xff0c;可以这样想&#xff0c;每次用到的b只能用已选到的最小的值&#xff0c;那可以把每个b都枚举一遍&#xff0c;然后每一次选时长最长的&#xff0c;且…

YOLOv5复现过程出现的问题(关于图片后缀不统一如包含大写的JPG)

划分训练集测试集时&#xff0c;出现有些图片后缀名不统一的问题&#xff0c;在资源管理器看着是jpg&#xff0c;但是程序中读着的时候是大写的JPG&#xff0c;因此需要将JPG修改为jpg。 这里采用的方式使用cmd。 在相应文件夹目录下打开cmd&#xff0c;然后输入for /R %i in (…

2023-8-18 区间合并

题目链接&#xff1a;区间合并 #include <iostream> #include <vector> #include <algorithm>using namespace std;const int N 100010;typedef pair<int, int> PII; int n; vector<PII> segs;void merge(vector<PII> &segs) {vector…

【业务功能篇69】Springboot 树形菜单栏功能设计

业务场景: 系统的界面&#xff0c;前端设计的时候&#xff0c;一般会给一个菜单栏&#xff0c;顶部横向以及左侧纵向的导航栏菜单&#xff0c;这里后端返回菜单栏的时候&#xff0c;就涉及层级父子项的问题&#xff0c;所以返回数据的时候&#xff0c;我们需要按照树化形式返回…

【水文学法总结】河道内生态流量计算方法(含MATLAB实现代码)

生态流量&#xff08;Ecological Flow, EF&#xff09; 是指维持河道内生态环境所需要的水流流量。生态流量计算方法众多&#xff0c;主要分为水文学方法、栖息地模拟法、水力学方法、整体法等&#xff0c;各方法多用于计算维持河道生态平衡的最小生态流量&#xff08;Minimum …

容斥原理 博弈论(多种Nim游戏解法)

目录 容斥原理容斥原理的简介能被整除的数&#xff08;典型例题&#xff09;实现思路代码实现扩展&#xff1a;用DPS实现 博弈论博弈论中的相关性质博弈论的相关结论先手必败必胜的证明Nim游戏&#xff08;典型例题&#xff09;代码实现 台阶-Nim游戏&#xff08;典型例题&…

STM32/AT32 MCO管脚输出时钟配置

前言&#xff1a;最近在学以太网通讯&#xff0c;发现RMII接口配置的时钟管脚有MCU自己输出&#xff0c;想要看看是怎么输出的&#xff0c;对此进行记录 1、交接项目项目上使用的是PA8管脚来输出时钟50MHZ&#xff0c;提供给上面refclk。 先看手册 PA8的复用功能具备将MCU时钟…

控制方法笔记

基于模型的控制&#xff1a;LQR&#xff0c;模型建立如果不准确&#xff0c;会给控制带来不确定性。 运动学和动力学&#xff1f; 大货车很多参数不了解的话&#xff0c;有时候不如用运动学。所以说&#xff0c;建模不精准不如用运动学。 LQR 模型是状态空间线性的。目标函…

SpringBoot + Vue 微人事(十)

职位管理前后端接口对接 先把table中的数据展示出来&#xff0c;table里面的数据实际上是positions里面的数据&#xff0c;就是要给positions:[] 赋上值 可以在methods中定义一个initPosition方法 methods:{//定义一个初始化positions的方法initPositions(){//发送一个get请求…

GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放

技术背景 我们在对接GB28181设备接入模块的时候&#xff0c;遇到这样的技术诉求&#xff0c;好多开发者期望能提供编码后&#xff08;H.264/H.265、AAC/PCMA&#xff09;数据对接&#xff0c;确保外部采集设备&#xff0c;比如无人机类似回调过来的数据&#xff0c;直接通过模…

《Go 语言第一课》课程学习笔记(八)

基本数据类型 Go 原生支持的数值类型有哪些&#xff1f; Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中&#xff0c;我们日常 Go 编码中使用最多的就是基本数据类型&#xff0c;而基本数据类型中使用占比最大的又是数值类型。 整型 Go 语言的…

MVCC 是否彻底解决了事物的隔离性 ?

目录 1. 什么是 MVCC 2. MVCC 是否彻底解决了事物的隔离性 3. MySQL 中如何实现共享锁和排他锁 4. MySQL 中如何实现悲观锁和乐观锁 1. 什么是 MVCC MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是一种多版本并发控制机制&…

QGraphicsItem 实例4 图元的旋转、缩放、切变和位移

实现图元的旋转、缩放、切变和位移 效果&#xff1a; mainwindow.h #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QGraphicsView> #include <QGraphicsScene> #include <QFrame> #include <QGraphicsView> #inclu…

部门用户权限应用设计及创建&一些实用小细节

前言 之前边做应用程序边完善数据库表&#xff0c;应用程序做出来了&#xff0c;但是数据库表也面目全非了&#xff0c;很多数据库字段都要重新设计&#xff0c;踩了个坑但是也是一种学习&#xff1a;每次代码开发也好&#xff0c;应用程序搭建也好&#xff0c;先做好数据库表…

深入探究 Java 8 新特性:Optional 类允许为空的对象类

深入探究 Java 8 新特性&#xff1a;Optional 类 概念说明 ​ 在 Java 8 中&#xff0c;引入了许多令人兴奋的新特性&#xff0c;其中之一就是 Optional 类。这个类主要用于解决空指针异常&#xff08;NullPointerException&#xff09;的问题&#xff0c;提供了一种更安全和…

kali换源之后更新

kali换源之后更新 1.更新索引 apt-get update 2.更新软件 apt-get upgrade 3.删除缓存包 apt-get clean

【网络教程】如何创建/添加钉钉机器人以及如何获取机器人的Token/Secret

文章目录 创建钉钉机器人添加钉钉机器人获取机器人的Token/Secret相关网站创建钉钉机器人 这里以PC端的操作为例,按照如下操作进行 访问 钉钉开放平台选择机器人选项卡,点击右上角的创建应用,这里会有一个弹窗,我这里选择的是继续使用旧版,如图按照要求填写相关信息创建自…