首页 > 其他分享 >opencv中cv2.KeyPoint和cv2.DMatch的理解

opencv中cv2.KeyPoint和cv2.DMatch的理解

时间:2024-08-23 17:06:35浏览次数:9  
标签:kp1 DMatch cv2 opencv 描述符 KeyPoint print 关键点

cv2.KeyPoint是opencv中关键点检测函数detectAndCompute()返回的关键点的类,他包含关键点的位置、方向等属性具体如下:
point2f pt;//位置坐标
float size; //特征点邻域直径
float angle; //特征点的方向,值为[0,360),负值表示不使用
float response;
int octave;//特征点所在的图像金字塔的组
int class_id;//用于聚类的id

点击查看代码
import cv2
img1=cv2.imread(r"D:\pic\shalabowa.jpg")
# Initiate SIFT detector
sift=cv2.SIFT_create()
kp1,des1=sift.detectAndCompute(img1,None)
print("数据类型:",kp1[0])
print("关键点坐标:",kp1[0].pt)# 第一个关键点位置坐标
print("邻域直径:",kp1[0].size)# 关键点邻域直径

运行结果:
数据类型: < cv2.KeyPoint 000002866DF07FC0>
关键点坐标: (2.471895694732666, 537.9429931640625)
邻域直径: 2.4969594478607178

cv2.DMatch是opencv中匹配函数(例如:knnMatch)返回的用于匹配关键点描述符的类,这个DMatch对象具有下列属性:
DMatch.distance-描述符之间的距离。越小越好。
DMatch.trainIdx- 目标图像中描述符的索引
DMatch.queryIdx- 查询图像中描述符的索引
DMatch.imgIdx- 目标图像的索引

点击查看代码
import cv2
img1=cv2.imread('data1/1.png',0) #queryImage
img2=cv2.imread('data1/2.png',0) # trainImage

# Initiate SIFT detector
orb=cv2.ORB_create()

#find the keypoints and descriptors with SIFT
kp1,des1=orb.detectAndCompute(img1,None)
kp2,des2=orb.detectAndCompute(img2,None)
# create BFMatcher object
bf=cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck=True)

# Match descriptors.
matches=bf.match(des1,des2)
print("数据类型:",type(matches[0]))# 查看类型
print("描述符之间的距离:",matches[0].distance) # 描述符之间的距离。越小越好
print("图像中描述符的索引:",matches[0].queryIdx)# 查询图像中描述符的索引

运行结果
数据类型: <class 'cv2.DMatch'>
描述符之间的距离: 33.0
图像中描述符的索引: 0

标签:kp1,DMatch,cv2,opencv,描述符,KeyPoint,print,关键点
From: https://www.cnblogs.com/SunshineWeather/p/18376566

相关文章

  • OpenCV(cv::FileStorage())
    目录1.功能2.方法和用法3.示例3.1写入数据3.2读取数据4.常见数据格式5.注意事项6.总结cv::FileStorage()是OpenCV提供的一个用于读写文件的类,主要用于读取和写入结构化数据(如XML、YAML或JSON文件)。它是用于在文件和内存之间存储和检索复杂数据结构的工具,例如矩......
  • OpenCV(cv::RNG、cv::theRNG())
    目录1.cv::RNG1.1构造函数1.2常用方法1.3示例2.cv::theRNG()2.1使用方式2.2全局随机数生成器的优点2.3示例3.总结在OpenCV中,cv::RNG和cv::theRNG()是用于随机数生成的工具,常用于图像处理、计算机视觉中的数据生成、扰动操作等。1.cv::RNGcv::RNG是一个用于生......
  • qt5.14.2 MSVC opencv(不结合vs)路径添加问题 测试通过
     不换行写法1win32:CONFIG(release,debug|release):LIBS+=-LG:/opencv4.4.0/opencv4.4_vs_msvc19_qt6.5/x64/vc17/lib/-lopencv_aruco440-lopencv_bgsegm440-lopencv_bioinspired440-lopencv_calib3d440-lopencv_ccalib440-lopencv_core440-lopencv_cvv440-lopen......
  • Qt5.14.2 MinGW7.3.0_64 opencv helloworld
    路径配置.proINCLUDEPATH+=E:\Opencv\includeLIBS+=E:\Opencv\x64\mingw\lib\libopencv_*.a 点击按钮打开一张图片1#include"mainwindow.h"2#include"ui_mainwindow.h"3#include<QFileDialog>4#include<QMessageBox>5......
  • OpenCV 机器人手眼标定
    OpenCV机器人手眼标定(九点标定法)对于初学者而言,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系又是如何建立?我们通常是利用张氏标定法,针对于相机的畸变进行标定,利用校正得到的参数对图形进行处理后再呈现出来。这个方法网上用的人很多,资......
  • java opencv 获取图中物品的倾斜角度(单个物品,如果存在多个物品,建议先将多个物品处理成
    //1、先连上opencv包System.setProperty("java.awt.headless","false");System.out.println(System.getProperty("java.library.path"));URLurl=ClassLoader.getSystemResource("lib/opencv/opencv_java4100.dll");System.load(url.g......
  • 【OpenCV教程】特征工程
    @目录1.模板匹配1.1原理1.2API1.3模板匹配计算方法1.4掩码的使用获得掩码1.5效果1.5模板匹配的缺陷无法应对旋转无法应对缩放2.cornerHarris(对灰度图)2.1角点的描述2.2原理(前置知识要求:线性代数)(以下为bolcksize=2的情况)2.3API2.4流程2.5优点与缺点测试代码图片旋转,角......
  • 【OpenCV教程】轮廓检测过程
    @目录1.查找轮廓1.1API1.2轮廓层级检测模式:索引号(层级)RETR_EXTERNAL(索引顺序:从右下到左上)RETR_LIST(recommended)(索引顺序:从右下到左上,由外到内)RETR_CCOMP(notrecommended)(索引顺序:由内到外,从右下到左上)RETR_TREE(recommended)1.3轮廓坐标点储存方式2.绘制轮廓2.1API3.轮廓面......
  • OpenCV(cv::SparseMat)
    目录1.主要特点和用途2.主要方法和成员函数3.示例代码4.优缺点cv::SparseMat是OpenCV中表示稀疏矩阵的类。稀疏矩阵用于存储大多数元素为零的矩阵,以节省内存和计算时间。与普通的密集矩阵不同,稀疏矩阵仅存储非零元素及其坐标。1.主要特点和用途稀疏数据存储:当......
  • ArchLinux配置OpenCV C++环境
    本文将简单介绍在ArchLinux中安装OpenCVC++库并运行一个简单的OpenCV程序的过程。参考:https://github.com/donaldssh/Install-OpenCV我的环境最新的ArchLinuxKDEPlasma6桌面环境OpenCV4.10.0clang18.1.8gcc14.2.1安装安装以下包:sudopacman-Shdf5vtk......