OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
未找到匹配项
cv::DescriptorMatcher 类参考抽象

匹配关键点描述符的抽象基类。 更多…

#include <opencv2/features2d.hpp>

cv::DescriptorMatcher 的协作图

类  DescriptorCollection
 

公共类型

枚举  MatcherType {
  FLANNBASED = 1 ,
  BRUTEFORCE = 2 ,
  BRUTEFORCE_L1 = 3 ,
  BRUTEFORCE_HAMMING = 4 ,
  BRUTEFORCE_HAMMINGLUT = 5 ,
  BRUTEFORCE_SL2 = 6
}
 

公共成员函数

虚  ~DescriptorMatcher ()
 
虚 void  add (InputArrayOfArrays descriptors)
 添加描述符以训练 CPU (trainDescCollectionis) 或 GPU (utrainDescCollectionis) 描述符集合。
 
虚 void  clear () CV_OVERRIDE
 清除训练描述符集合。
 
CV_NODISCARD_STD Ptr< DescriptorMatcherclone (bool emptyTrainData=false) const =0
 克隆匹配器。
 
虚 bool  empty () const CV_OVERRIDE
 如果两个集合中都没有训练描述符,则返回 true。
 
const std::vector< Mat > & getTrainDescriptors () const
 返回指向训练描述符集合 trainDescCollection 的常量链接。
 
虚 bool  isMaskSupported () const =0
 如果描述符匹配器支持掩蔽允许的匹配,则返回 true。
 
void  knnMatch (InputArray queryDescriptors, InputArray trainDescriptors, std::vector< std::vector< DMatch > > &matches, int k, InputArray mask=noArray(), bool compactResult=false) const
 为查询集中的每个描述符查找 k 个最佳匹配。
 
void  knnMatch (InputArray queryDescriptors, std::vector< std::vector< DMatch > > &matches, int k, InputArrayOfArrays masks=noArray(), bool compactResult=false)
 
void  match (InputArray queryDescriptors, InputArray trainDescriptors, std::vector< DMatch > &matches, InputArray mask=noArray()) const
 为查询集中的每个描述符查找最佳匹配。
 
void  match (InputArray queryDescriptors, std::vector< DMatch > &matches, InputArrayOfArrays masks=noArray())
 
void  radiusMatch (InputArray queryDescriptors, InputArray trainDescriptors, std::vector< std::vector< DMatch > > &matches, float maxDistance, InputArray mask=noArray(), bool compactResult=false) const
 对于每个查询描述符,查找距离不超过指定距离的训练描述符。
 
void  radiusMatch (InputArray queryDescriptors, std::vector< std::vector< DMatch > > &matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false)
 
虚 void  read (const FileNode &) CV_OVERRIDE
 从文件存储中读取算法参数。
 
void  read (const String &fileName)
 
虚 void  train ()
 训练描述符匹配器。
 
void  write (const Ptr< FileStorage > &fs, const String &name) const
 
void  write (const String &fileName) const
 
虚 void  write (FileStorage &) const CV_OVERRIDE
 将算法参数存储到文件存储中。
 
void  write (FileStorage &fs, const String &name) const
 
- 从 cv::Algorithm 继承的公共成员函数
 Algorithm ()
 
虚  ~Algorithm ()
 
String getDefaultName () const
 
虚 void  save (const String &filename) const
 
void  write (const Ptr< FileStorage > &fs, const String &name=String()) const
 
void  write (FileStorage &fs, const String &name) const
 

公共静态成员函数

static Ptr< DescriptorMatchercreate (const DescriptorMatcher::MatcherType &matcherType)
 
static Ptr< DescriptorMatchercreate (const String &descriptorMatcherType)
 创建指定类型,使用默认参数(使用默认构造函数)的描述符匹配器。
 
- 继承自 cv::Algorithm 的公共静态成员函数
template<typename _Tp >
static Ptr< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串中加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 

保护成员函数

void  checkMasks (InputArrayOfArrays masks, int queryDescriptorsCount) const
 
虚 void  knnMatchImpl (InputArray queryDescriptors, std::vector< std::vector< DMatch > > &matches, int k, InputArrayOfArrays masks=noArray(), bool compactResult=false)=0
 
虚 void  radiusMatchImpl (InputArray queryDescriptors, std::vector< std::vector< DMatch > > &matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false)=0
 
- 继承自 cv::Algorithm 的保护成员函数
void  writeFormat (FileStorage &fs) const
 

保护静态成员函数

static CV_NODISCARD_STD Mat clone_op (Mat m)
 
static bool isMaskedOut (InputArrayOfArrays masks, int queryIdx)
 
static bool isPossibleMatch (InputArray mask, int queryIdx, int trainIdx)
 

保护属性

std::vector< MattrainDescCollection
 来自训练图像的描述符集合。
 
std::vector< UMatutrainDescCollection
 

详细描述

关键点描述符匹配的抽象基类。

它有两组匹配方法:用于将图像的描述符与另一幅图像或一组图像进行匹配。

成员枚举文档

◆ MatcherType

枚举器
FLANNBASED 
BRUTEFORCE 
BRUTEFORCE_L1 
BRUTEFORCE_HAMMING 
BRUTEFORCE_HAMMINGLUT 
BRUTEFORCE_SL2 

构造函数和析构函数文档

◆ ~DescriptorMatcher()

virtual cv::DescriptorMatcher::~DescriptorMatcher ( )
virtual

成员函数文档

◆ add()

virtual void cv::DescriptorMatcher::add ( InputArrayOfArrays descriptors)
virtual
Python
cv.DescriptorMatcher.add(descriptors) -> None

添加描述符以训练 CPU (trainDescCollectionis) 或 GPU (utrainDescCollectionis) 描述符集合。

如果集合不为空,则将新的描述符添加到现有的训练描述符中。

参数
descriptors要添加的描述符。每个 descriptors[i] 都是来自同一训练图像的一组描述符。

cv::FlannBasedMatcher 中重新实现。

◆ checkMasks()

void cv::DescriptorMatcher::checkMasks ( InputArrayOfArrays masks,
int queryDescriptorsCount ) const
protected

◆ clear()

virtual void cv::DescriptorMatcher::clear ( )
virtual
Python
cv.DescriptorMatcher.clear() -> None

清除训练描述符集合。

cv::Algorithm 重新实现。

cv::FlannBasedMatcher 中重新实现。

◆ clone()

virtual CV_NODISCARD_STD Ptr< DescriptorMatcher > cv::DescriptorMatcher::clone ( bool emptyTrainData = false) const
纯虚函数
Python
cv.DescriptorMatcher.clone([, emptyTrainData]) -> retval

克隆匹配器。

参数
emptyTrainData如果 emptyTrainData 为 false,则该方法创建对象的深层副本,即复制参数和训练数据。如果 emptyTrainData 为 true,则该方法创建具有当前参数但训练数据为空的对象副本。

cv::BFMatchercv::FlannBasedMatcher 中实现。

◆ clone_op()

static CV_NODISCARD_STD Mat cv::DescriptorMatcher::clone_op ( Mat m)
inlinestaticprotected
此函数的调用图如下所示

◆ create() [1/2]

static Ptr< DescriptorMatcher > cv::DescriptorMatcher::create ( const DescriptorMatcher::MatcherType & 匹配器类型)
静态
Python
cv.DescriptorMatcher.create(描述符匹配器类型) -> retval
cv.DescriptorMatcher.create(匹配器类型) -> retval
cv.DescriptorMatcher_create(描述符匹配器类型) -> retval
cv.DescriptorMatcher_create(匹配器类型) -> retval

◆ create() [2/2]

static Ptr< DescriptorMatcher > cv::DescriptorMatcher::create ( const String & 描述符匹配器类型)
静态
Python
cv.DescriptorMatcher.create(描述符匹配器类型) -> retval
cv.DescriptorMatcher.create(匹配器类型) -> retval
cv.DescriptorMatcher_create(描述符匹配器类型) -> retval
cv.DescriptorMatcher_create(匹配器类型) -> retval

创建指定类型,使用默认参数(使用默认构造函数)的描述符匹配器。

参数
描述符匹配器类型描述符匹配器类型。目前支持以下匹配器类型:
  • BruteForce(使用 L2 距离)
  • BruteForce-L1
  • BruteForce-Hamming
  • BruteForce-Hamming(2)
  • FlannBased

◆ empty()

virtual bool cv::DescriptorMatcher::empty ( ) const
virtual
Python
cv.DescriptorMatcher.empty() -> retval

如果两个集合中都没有训练描述符,则返回 true。

重载自 cv::Algorithm.

◆ getTrainDescriptors()

const std::vector< Mat > & cv::DescriptorMatcher::getTrainDescriptors ( ) const
Python
cv.DescriptorMatcher.getTrainDescriptors() -> retval

返回指向训练描述符集合 trainDescCollection 的常量链接。

◆ isMaskedOut()

static bool cv::DescriptorMatcher::isMaskedOut ( InputArrayOfArrays masks,
int queryIdx )
静态保护

◆ isMaskSupported()

virtual bool cv::DescriptorMatcher::isMaskSupported ( ) const
纯虚函数
Python
cv.DescriptorMatcher.isMaskSupported() -> retval

如果描述符匹配器支持掩蔽允许的匹配,则返回 true。

实现于 cv::BFMatchercv::FlannBasedMatcher.

◆ isPossibleMatch()

static bool cv::DescriptorMatcher::isPossibleMatch ( 输入数组 掩码,
int 查询索引,
int 训练索引 )
静态保护

◆ knnMatch() [1/2]

void cv::DescriptorMatcher::knnMatch ( 输入数组 查询描述符,
输入数组 训练描述符,
std::vector< std::vector< DMatch > > & 匹配结果,
int k,
输入数组 掩码 = noArray(),
bool 紧凑结果 = false ) const
Python
cv.DescriptorMatcher.knnMatch(queryDescriptors, trainDescriptors, k[, mask[, compactResult]]) -> 匹配结果
cv.DescriptorMatcher.knnMatch(queryDescriptors, k[, masks[, compactResult]]) -> 匹配结果

为查询集中的每个描述符查找 k 个最佳匹配。

参数
查询描述符查询描述符集。
训练描述符训练描述符集。此集合不会添加到类对象中存储的训练描述符集合中。
掩码指定输入查询和训练描述符矩阵之间允许匹配的掩码。
匹配结果匹配结果。每个 matches[i] 是针对相同查询描述符的 k 个或更少的匹配。
k每个查询描述符找到的最佳匹配数,如果查询描述符的总可能匹配数少于 k,则更少。
紧凑结果当掩码(或掩码集)不为空时使用的参数。如果 compactResult 为 false,则 matches 向量的大小与 queryDescriptors 行数相同。如果 compactResult 为 true,则 matches 向量不包含完全被掩码遮盖的查询描述符的匹配。

这些扩展的 DescriptorMatcher::match 方法变体为每个查询描述符查找多个最佳匹配。匹配结果按距离递增的顺序返回。有关查询和训练描述符的详细信息,请参阅 DescriptorMatcher::match

◆ knnMatch() [2/2]

void cv::DescriptorMatcher::knnMatch ( 输入数组 查询描述符,
std::vector< std::vector< DMatch > > & 匹配结果,
int k,
InputArrayOfArrays 掩码集 = noArray(),
bool 紧凑结果 = false )
Python
cv.DescriptorMatcher.knnMatch(queryDescriptors, trainDescriptors, k[, mask[, compactResult]]) -> 匹配结果
cv.DescriptorMatcher.knnMatch(queryDescriptors, k[, masks[, compactResult]]) -> 匹配结果

这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。

参数
查询描述符查询描述符集。
匹配结果匹配结果。每个 matches[i] 是针对相同查询描述符的 k 个或更少的匹配。
k每个查询描述符找到的最佳匹配数,如果查询描述符的总可能匹配数少于 k,则更少。
masks掩码集。每个 masks[i] 指定输入查询描述符与来自第 i 个图像 trainDescCollection[i] 的存储的训练描述符之间允许的匹配。
紧凑结果当掩码(或掩码集)不为空时使用的参数。如果 compactResult 为 false,则 matches 向量的大小与 queryDescriptors 行数相同。如果 compactResult 为 true,则 matches 向量不包含完全被掩码遮盖的查询描述符的匹配。

◆ knnMatchImpl()

virtual void cv::DescriptorMatcher::knnMatchImpl ( 输入数组 查询描述符,
std::vector< std::vector< DMatch > > & 匹配结果,
int k,
InputArrayOfArrays 掩码集 = noArray(),
bool 紧凑结果 = false )
保护纯虚

实际上,匹配仅由以下两种方法实现。这些方法假设类对象已经过训练。公共匹配方法在调用 train() 后调用这些方法。

实现于 cv::BFMatchercv::FlannBasedMatcher.

此函数的调用图如下所示

◆ match() [1/2]

void cv::DescriptorMatcher::match ( 输入数组 查询描述符,
输入数组 训练描述符,
std::vector< DMatch > & 匹配结果,
输入数组 掩码 = noArray() ) const
Python
cv.DescriptorMatcher.match(queryDescriptors, trainDescriptors[, mask]) -> 匹配结果
cv.DescriptorMatcher.match(queryDescriptors[, masks]) -> 匹配结果

为查询集中的每个描述符查找最佳匹配。

参数
查询描述符查询描述符集。
训练描述符训练描述符集。此集合不会添加到类对象中存储的训练描述符集合中。
匹配结果匹配结果。如果查询描述符在掩码中被屏蔽,则不会为此描述符添加匹配。因此,匹配结果的大小可能小于查询描述符的数量。
掩码指定输入查询和训练描述符矩阵之间允许匹配的掩码。

在此方法的第一个变体中,训练描述符作为输入参数传递。在此方法的第二个变体中,使用由 DescriptorMatcher::add 设置的训练描述符集合。可以传递可选掩码(或掩码集)来指定可以匹配哪些查询和训练描述符。即,只有当 mask.at<uchar>(i,j) 非零时,queryDescriptors[i] 才能与 trainDescriptors[j] 匹配。

◆ match() [2/2]

void cv::DescriptorMatcher::match ( 输入数组 查询描述符,
std::vector< DMatch > & 匹配结果,
InputArrayOfArrays 掩码集 = noArray() )
Python
cv.DescriptorMatcher.match(queryDescriptors, trainDescriptors[, mask]) -> 匹配结果
cv.DescriptorMatcher.match(queryDescriptors[, masks]) -> 匹配结果

这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。

参数
查询描述符查询描述符集。
匹配结果匹配结果。如果查询描述符在掩码中被屏蔽,则不会为此描述符添加匹配。因此,匹配结果的大小可能小于查询描述符的数量。
masks掩码集。每个 masks[i] 指定输入查询描述符与来自第 i 个图像 trainDescCollection[i] 的存储的训练描述符之间允许的匹配。

◆ radiusMatch() [1/2]

void cv::DescriptorMatcher::radiusMatch ( 输入数组 查询描述符,
输入数组 训练描述符,
std::vector< std::vector< DMatch > > & 匹配结果,
浮点数 最大距离,
输入数组 掩码 = noArray(),
bool 紧凑结果 = false ) const
Python
cv.DescriptorMatcher.radiusMatch(queryDescriptors, trainDescriptors, maxDistance[, mask[, compactResult]]) -> 匹配结果
cv.DescriptorMatcher.radiusMatch(queryDescriptors, maxDistance[, masks[, compactResult]]) -> 匹配结果

对于每个查询描述符,查找距离不超过指定距离的训练描述符。

参数
查询描述符查询描述符集。
训练描述符训练描述符集。此集合不会添加到类对象中存储的训练描述符集合中。
匹配结果找到的匹配。
紧凑结果当掩码(或掩码集)不为空时使用的参数。如果 compactResult 为 false,则 matches 向量的大小与 queryDescriptors 行数相同。如果 compactResult 为 true,则 matches 向量不包含完全被掩码遮盖的查询描述符的匹配。
最大距离匹配描述符之间距离的阈值。这里的距离是指度量距离(例如 Hamming 距离),而不是坐标之间的距离(以像素为单位测量)!
掩码指定输入查询和训练描述符矩阵之间允许匹配的掩码。

对于每个查询描述符,该方法查找训练描述符,使得查询描述符与训练描述符之间的距离等于或小于 maxDistance。找到的匹配结果按距离递增的顺序返回。

◆ radiusMatch() [2/2]

void cv::DescriptorMatcher::radiusMatch ( 输入数组 查询描述符,
std::vector< std::vector< DMatch > > & 匹配结果,
浮点数 最大距离,
InputArrayOfArrays 掩码集 = noArray(),
bool 紧凑结果 = false )
Python
cv.DescriptorMatcher.radiusMatch(queryDescriptors, trainDescriptors, maxDistance[, mask[, compactResult]]) -> 匹配结果
cv.DescriptorMatcher.radiusMatch(queryDescriptors, maxDistance[, masks[, compactResult]]) -> 匹配结果

这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。

参数
查询描述符查询描述符集。
匹配结果找到的匹配。
最大距离匹配描述符之间距离的阈值。这里的距离是指度量距离(例如 Hamming 距离),而不是坐标之间的距离(以像素为单位测量)!
masks掩码集。每个 masks[i] 指定输入查询描述符与来自第 i 个图像 trainDescCollection[i] 的存储的训练描述符之间允许的匹配。
紧凑结果当掩码(或掩码集)不为空时使用的参数。如果 compactResult 为 false,则 matches 向量的大小与 queryDescriptors 行数相同。如果 compactResult 为 true,则 matches 向量不包含完全被掩码遮盖的查询描述符的匹配。

◆ radiusMatchImpl()

virtual void cv::DescriptorMatcher::radiusMatchImpl ( 输入数组 查询描述符,
std::vector< std::vector< DMatch > > & 匹配结果,
浮点数 最大距离,
InputArrayOfArrays 掩码集 = noArray(),
bool 紧凑结果 = false )
保护纯虚

实现于 cv::BFMatchercv::FlannBasedMatcher.

此函数的调用图如下所示

◆ read() [1/2]

virtual void cv::DescriptorMatcher::read ( const FileNode & fn)
virtual
Python
cv.DescriptorMatcher.read(fileName) -> None
cv.DescriptorMatcher.read(arg1) -> None

从文件存储中读取算法参数。

重载自 cv::Algorithm.

重载于 cv::FlannBasedMatcher.

◆ read() [2/2]

void cv::DescriptorMatcher::read ( const String & fileName)
inline
Python
cv.DescriptorMatcher.read(fileName) -> None
cv.DescriptorMatcher.read(arg1) -> None
此函数的调用图如下所示

◆ train()

virtual void cv::DescriptorMatcher::train ( )
virtual
Python
cv.DescriptorMatcher.train() -> None

训练描述符匹配器。

训练描述符匹配器(例如,FLANN索引)。在所有匹配方法中,train() 方法在每次匹配前都会运行。一些描述符匹配器(例如,BruteForceMatcher)对此方法的实现为空。其他匹配器会真正训练其内部结构(例如,FlannBasedMatcher 训练 flann::Index)。

重载于 cv::FlannBasedMatcher.

◆ write() [1/4]

void cv::DescriptorMatcher::write ( const Ptr< FileStorage > & fs,
const String & name ) const
inline
Python
cv.DescriptorMatcher.write(fileName) -> None
cv.DescriptorMatcher.write(fs, name) -> None

◆ write() [2/4]

void cv::DescriptorMatcher::write ( const String & fileName) const
inline
Python
cv.DescriptorMatcher.write(fileName) -> None
cv.DescriptorMatcher.write(fs, name) -> None
此函数的调用图如下所示

◆ write() [3/4]

virtual void cv::DescriptorMatcher::write ( FileStorage & fs) const
virtual
Python
cv.DescriptorMatcher.write(fileName) -> None
cv.DescriptorMatcher.write(fs, name) -> None

将算法参数存储到文件存储中。

重载自 cv::Algorithm.

重载于 cv::FlannBasedMatcher.

◆ write() [4/4]

void cv::DescriptorMatcher::write ( FileStorage & fs,
const String & name ) const
inline
Python
cv.DescriptorMatcher.write(fileName) -> None
cv.DescriptorMatcher.write(fs, name) -> None

成员数据文档

◆ trainDescCollection

std::vector<Mat> cv::DescriptorMatcher::trainDescCollection
protected

来自训练图像的描述符集合。

◆ utrainDescCollection

std::vector<UMat> cv::DescriptorMatcher::utrainDescCollection
protected

此类的文档是从以下文件生成的: