OpenCV2簡單的特徵匹配

2021-08-20 05:40:05 字數 1209 閱讀 2933

特徵的匹配大致可以分為3個步驟:

特徵的提取

計算特徵向量

特徵匹配

對於3個步驟,在opencv2中都進行了封裝。所有的特徵提取方法都實現featuredetector介面,descriptorextractor介面則封裝了對特徵向量(特徵描述符)的提取,而所有特徵向量的匹配都繼承了descriptormatcher介面。

簡單的特徵匹配

int main()

例項化了乙個特徵提取器surffeaturedetector,其構造函式引數(minhessian)用來平衡提取到的特徵點的數量和特徵提取的穩定性的,對於不同的特徵提取器改引數具有不同的含義和取值範圍。

對得到的特徵點提取特徵向量(特徵描述符)

匹配,上面**使用了暴力匹配的方法,最後的匹配結果儲存在vector中。

dmatch用來儲存匹配後的結果

struct dmatch

dmatch(int _queryidx, int _trainidx, float _distance) :

queryidx(_queryidx), trainidx(_trainidx), imgidx(-1), distance(_distance) {}

dmatch(int _queryidx, int _trainidx, int _imgidx, float _distance) : queryidx(_queryidx), trainidx(_trainidx), imgidx(_imgidx), distance(_distance) {}

int queryidx; //此匹配對應的查詢影象的特徵描述子索引

int trainidx; //此匹配對應的訓練(模板)影象的特徵描述子索引

int imgidx; //訓練影象的索引(若有多個)

float distance; //兩個特徵向量之間的歐氏距離,越小表明匹配度越高。

bool operator < (const dmatch &m) const;

};

然後使用drawmatches方法可以匹配後的結構儲存為mat

OpenCV2簡單的特徵匹配

特徵的匹配大致可以分為3個步驟 特徵的提取 計算特徵向量 特徵匹配 對於3個步驟,在opencv2中都進行了封裝。所有的特徵提取方法都實現featuredetector介面,descriptorextractor介面則封裝了對特徵向量 特徵描述符 的提取,而所有特徵向量的匹配都繼承了descript...

OpenCV2簡單的特徵匹配

特徵的匹配大致可以分為3個步驟 特徵的提取 計算特徵向量 特徵匹配 對於3個步驟,在opencv2中都進行了封裝。所有的特徵提取方法都實現featuredetector介面,descriptorextractor介面則封裝了對特徵向量 特徵描述符 的提取,而所有特徵向量的匹配都繼承了descript...

Opencv之特徵匹配

import cv2 import numpy as np import matplotlib.pyplot as plt matplotlib inline def cv show name,img cv2.imshow name,img cv2.waitkey 0 cv2.destroyallw...