OpenCV 4.12.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
}
 

公有成員函式

virtual ~DescriptorMatcher ()
 
virtual void add (InputArrayOfArrays descriptors)
 新增描述符以訓練 CPU (trainDescCollectionis) 或 GPU (utrainDescCollectionis) 描述符集合。
 
virtual void clear () CV_OVERRIDE
 清除訓練描述符集合。
 
virtual CV_NODISCARD_STD Ptr< DescriptorMatcherclone (bool emptyTrainData=false) const =0
 克隆匹配器。
 
virtual bool empty () const CV_OVERRIDE
 如果兩個集合中都沒有訓練描述符,則返回 true。
 
const std::vector< Mat > & getTrainDescriptors () const
 返回到訓練描述符集合 trainDescCollection 的常量連結。
 
virtual 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)
 
virtual void read (const FileNode &) CV_OVERRIDE
 從檔案儲存中讀取演算法引數。
 
void read (const String &fileName)
 
virtual void train ()
 訓練描述符匹配器。
 
void write (const Ptr< FileStorage > &fs, const String &name) const
 
void write (const String &fileName) const
 
virtual void write (FileStorage &) const CV_OVERRIDE
 將演算法引數儲存到檔案儲存中。
 
void write (FileStorage &fs, const String &name) const
 
- 繼承自 cv::Algorithm 的公有成員函式
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual String getDefaultName () const
 
virtual 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
 
virtual void knnMatchImpl (InputArray queryDescriptors, std::vector< std::vector< DMatch > > &matches, int k, InputArrayOfArrays masks=noArray(), bool compactResult=false)=0
 
virtual 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) ->

新增描述符以訓練 CPU (trainDescCollectionis) 或 GPU (utrainDescCollectionis) 描述符集合。

如果集合不為空,則新描述符將新增到現有訓練描述符中。

引數
descriptors要新增的描述符。每個 descriptors[i] 都是來自同一訓練影像的一組描述符。

cv::FlannBasedMatcher 中重新實現。

◆ checkMasks()

void cv::DescriptorMatcher::checkMasks ( InputArrayOfArrays 遮罩,
int queryDescriptorsCount ) const
保護

◆ clear()

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

清除訓練描述符集合。

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)
內聯靜態保護
此函式的呼叫圖如下

◆ create() [1/2]

static Ptr< DescriptorMatcher > cv::DescriptorMatcher::create ( const DescriptorMatcher::MatcherType & 匹配器型別)
static
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 & 描述符匹配器型別)
static
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 遮罩,
int queryIdx )
靜態保護

◆ isMaskSupported()

virtual bool cv::DescriptorMatcher::isMaskSupported ( ) const
純虛擬函式
Python
cv.DescriptorMatcher.isMaskSupported() -> retval

如果描述符匹配器支援遮罩允許的匹配,則返回 true。

cv::BFMatchercv::FlannBasedMatcher 中實現。

◆ isPossibleMatch()

static bool cv::DescriptorMatcher::isPossibleMatch ( InputArray mask,
int queryIdx,
int trainIdx )
靜態保護

◆ knnMatch() [1/2]

void cv::DescriptorMatcher::knnMatch ( InputArray queryDescriptors,
InputArray trainDescriptors,
std::vector< std::vector< DMatch > > & matches,
int k,
InputArray mask = noArray(),
bool compactResult = false ) const
Python
cv.DescriptorMatcher.knnMatch(queryDescriptors, trainDescriptors, k[, mask[, compactResult]]) -> matches
cv.DescriptorMatcher.knnMatch(queryDescriptors, k[, masks[, compactResult]]) -> matches

為查詢集中的每個描述符查詢 k 個最佳匹配。

引數
queryDescriptors查詢描述符集。
trainDescriptors訓練描述符集。此集合未新增到類物件中儲存的訓練描述符集合中。
mask指定輸入查詢與描述符訓練矩陣之間允許匹配的掩碼。
matches匹配項。每個 matches[i] 是針對同一查詢描述符的 k 個或更少匹配項。
k每個查詢描述符找到的最佳匹配數,如果查詢描述符的總可能匹配數少於 k,則為更少。
compactResult當掩碼(或多個掩碼)不為空時使用的引數。如果 compactResult 為 false,則 matches 向量的大小與 queryDescriptors 行數相同。如果 compactResult 為 true,則 matches 向量不包含完全被掩碼排除的查詢描述符的匹配項。

DescriptorMatcher::match 方法的這些擴充套件變體為每個查詢描述符查詢幾個最佳匹配。匹配項按距離遞增的順序返回。有關查詢和訓練描述符的詳細資訊,請參閱 DescriptorMatcher::match

◆ knnMatch() [2/2]

void cv::DescriptorMatcher::knnMatch ( InputArray queryDescriptors,
std::vector< std::vector< DMatch > > & matches,
int k,
InputArrayOfArrays masks = noArray(),
bool compactResult = false )
Python
cv.DescriptorMatcher.knnMatch(queryDescriptors, trainDescriptors, k[, mask[, compactResult]]) -> matches
cv.DescriptorMatcher.knnMatch(queryDescriptors, k[, masks[, compactResult]]) -> matches

這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於它接受的引數。

引數
queryDescriptors查詢描述符集。
matches匹配項。每個 matches[i] 是針對同一查詢描述符的 k 個或更少匹配項。
k每個查詢描述符找到的最佳匹配數,如果查詢描述符的總可能匹配數少於 k,則為更少。
遮罩掩碼集。每個 masks[i] 指定輸入查詢描述符與來自第 i 個影像 trainDescCollection[i] 的儲存訓練描述符之間的允許匹配。
compactResult當掩碼(或多個掩碼)不為空時使用的引數。如果 compactResult 為 false,則 matches 向量的大小與 queryDescriptors 行數相同。如果 compactResult 為 true,則 matches 向量不包含完全被掩碼排除的查詢描述符的匹配項。

◆ knnMatchImpl()

virtual void cv::DescriptorMatcher::knnMatchImpl ( InputArray queryDescriptors,
std::vector< std::vector< DMatch > > & matches,
int k,
InputArrayOfArrays masks = noArray(),
bool compactResult = false )
保護純虛

實際上,匹配僅由以下兩種方法實現。這些方法假定類物件已經過訓練。公有匹配方法在呼叫 train() 後呼叫這些方法。

cv::BFMatchercv::FlannBasedMatcher 中實現。

此函式的呼叫圖如下

◆ match() [1/2]

void cv::DescriptorMatcher::match ( InputArray queryDescriptors,
InputArray trainDescriptors,
std::vector< DMatch > & matches,
InputArray mask = noArray() ) const
Python
cv.DescriptorMatcher.match(queryDescriptors, trainDescriptors[, mask]) -> matches
cv.DescriptorMatcher.match(queryDescriptors[, masks]) -> matches

為查詢集中的每個描述符查詢最佳匹配。

引數
queryDescriptors查詢描述符集。
trainDescriptors訓練描述符集。此集合未新增到類物件中儲存的訓練描述符集合中。
matches匹配項。如果查詢描述符在掩碼中被遮罩,則不會為此描述符新增匹配項。因此,匹配項大小可能小於查詢描述符計數。
mask指定輸入查詢與描述符訓練矩陣之間允許匹配的掩碼。

此方法的第一種變體中,訓練描述符作為輸入引數傳遞。該方法的第二種變體中使用透過 DescriptorMatcher::add 設定的訓練描述符集合。可以傳遞可選掩碼(或多個掩碼)以指定哪些查詢和訓練描述符可以匹配。即,僅當 mask.at<uchar>(i,j) 非零時,queryDescriptors[i] 才能與 trainDescriptors[j] 匹配。

◆ match() [2/2]

void cv::DescriptorMatcher::match ( InputArray queryDescriptors,
std::vector< DMatch > & matches,
InputArrayOfArrays masks = noArray() )
Python
cv.DescriptorMatcher.match(queryDescriptors, trainDescriptors[, mask]) -> matches
cv.DescriptorMatcher.match(queryDescriptors[, masks]) -> matches

這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於它接受的引數。

引數
queryDescriptors查詢描述符集。
matches匹配項。如果查詢描述符在掩碼中被遮罩,則不會為此描述符新增匹配項。因此,匹配項大小可能小於查詢描述符計數。
遮罩掩碼集。每個 masks[i] 指定輸入查詢描述符與來自第 i 個影像 trainDescCollection[i] 的儲存訓練描述符之間的允許匹配。

◆ radiusMatch() [1/2]

void cv::DescriptorMatcher::radiusMatch ( InputArray queryDescriptors,
InputArray trainDescriptors,
std::vector< std::vector< DMatch > > & matches,
float maxDistance,
InputArray mask = noArray(),
bool compactResult = false ) const
Python
cv.DescriptorMatcher.radiusMatch(queryDescriptors, trainDescriptors, maxDistance[, mask[, compactResult]]) -> matches
cv.DescriptorMatcher.radiusMatch(queryDescriptors, maxDistance[, masks[, compactResult]]) -> matches

對於每個查詢描述符,查詢距離不大於指定距離的訓練描述符。

引數
queryDescriptors查詢描述符集。
trainDescriptors訓練描述符集。此集合未新增到類物件中儲存的訓練描述符集合中。
matches找到的匹配項。
compactResult當掩碼(或多個掩碼)不為空時使用的引數。如果 compactResult 為 false,則 matches 向量的大小與 queryDescriptors 行數相同。如果 compactResult 為 true,則 matches 向量不包含完全被掩碼排除的查詢描述符的匹配項。
maxDistance匹配描述符之間距離的閾值。此處距離指度量距離(例如 Hamming 距離),而非座標間的距離(以畫素為單位測量)!
mask指定輸入查詢與描述符訓練矩陣之間允許匹配的掩碼。

對於每個查詢描述符,這些方法會找到與查詢描述符距離等於或小於 maxDistance 的訓練描述符。找到的匹配項按距離遞增的順序返回。

◆ radiusMatch() [2/2]

void cv::DescriptorMatcher::radiusMatch ( InputArray queryDescriptors,
std::vector< std::vector< DMatch > > & matches,
float maxDistance,
InputArrayOfArrays masks = noArray(),
bool compactResult = false )
Python
cv.DescriptorMatcher.radiusMatch(queryDescriptors, trainDescriptors, maxDistance[, mask[, compactResult]]) -> matches
cv.DescriptorMatcher.radiusMatch(queryDescriptors, maxDistance[, masks[, compactResult]]) -> matches

這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於它接受的引數。

引數
queryDescriptors查詢描述符集。
matches找到的匹配項。
maxDistance匹配描述符之間距離的閾值。此處距離指度量距離(例如 Hamming 距離),而非座標間的距離(以畫素為單位測量)!
遮罩掩碼集。每個 masks[i] 指定輸入查詢描述符與來自第 i 個影像 trainDescCollection[i] 的儲存訓練描述符之間的允許匹配。
compactResult當掩碼(或多個掩碼)不為空時使用的引數。如果 compactResult 為 false,則 matches 向量的大小與 queryDescriptors 行數相同。如果 compactResult 為 true,則 matches 向量不包含完全被掩碼排除的查詢描述符的匹配項。

◆ radiusMatchImpl()

virtual void cv::DescriptorMatcher::radiusMatchImpl ( InputArray queryDescriptors,
std::vector< std::vector< DMatch > > & matches,
float maxDistance,
InputArrayOfArrays masks = noArray(),
bool compactResult = false )
保護純虛

cv::BFMatchercv::FlannBasedMatcher 中實現。

此函式的呼叫圖如下

◆ read() [1/2]

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

從檔案儲存中讀取演算法引數。

cv::Algorithm 重新實現。

cv::FlannBasedMatcher 中重新實現。

◆ read() [2/2]

void cv::DescriptorMatcher::read ( const String & fileName)
inline
Python
cv.DescriptorMatcher.read(fileName) ->
cv.DescriptorMatcher.read(arg1) ->
此函式的呼叫圖如下

◆ train()

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

訓練描述符匹配器。

訓練描述符匹配器(例如,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) ->
cv.DescriptorMatcher.write(fs, name) ->

◆ write() [2/4]

void cv::DescriptorMatcher::write ( const String & fileName) const
inline
Python
cv.DescriptorMatcher.write(fileName) ->
cv.DescriptorMatcher.write(fs, name) ->
此函式的呼叫圖如下

◆ write() [3/4]

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

將演算法引數儲存到檔案儲存中。

cv::Algorithm 重新實現。

cv::FlannBasedMatcher 中重新實現。

◆ write() [4/4]

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

成員資料文件

◆ trainDescCollection

std::vector<Mat> cv::DescriptorMatcher::trainDescCollection
保護

來自訓練影像的描述符集合。

◆ utrainDescCollection

std::vector<UMat> cv::DescriptorMatcher::utrainDescCollection
保護

此類的文件生成自以下檔案