opencv python 特徵匹配

2021-09-13 12:39:06 字數 4276 閱讀 8926

feature matching

brute-force匹配非常簡單,首先在第一幅影象中選取乙個關鍵點然後依次與第二幅影象的每個關鍵點進行(描述符)距離測試,最後返回距離最近的關鍵點.

對於bf匹配器,首先我們必須使用cv2.bfmatcher()建立bfmatcher物件。它需要兩個可選的引數.

第乙個是normtype,它指定要使用的距離測量,預設情況下,它是cv2.norm_l2.它適用於sift,surf等(cv2.norm_l1也在那裡).對於基於二進位制字串的描述符,如orb,brief,brisk等,應使用cv2.norm_hamming,使用漢明距離作為度量,如果orb使用wta_k == 3or4,則應使用cv2.norm_hamming2.

crosscheck:預設值為false。如果設定為true,匹配條件就會更加嚴格,只有到a中的第i個特徵點與b中的第j個特徵點距離最近,並且b中的第j個特徵點到a中的第i個特徵點也是最近時才會返回最佳匹配,即這兩個特徵點要互相匹配才行.

兩個重要的方法是bfmatcher.match()bfmatcher.knnmatch(), 第乙個返回最佳匹配, 第二種方法返回k個最佳匹配,其中k由使用者指定.

使用cv2.drawmatches()來繪製匹配的點,它會將兩幅影象先水平排列,然後在最佳匹配的點之間繪製直線。如果前面使用的bfmatcher.knnmatch(),現在可以使用函式cv2.drawmatchsknn為每個關鍵點和它的個最佳匹配點繪製匹配線。如果要選擇性繪製就要給函式傳入乙個掩模.

matches = bf.match(des1,des2)行的結果是dmatch物件的列表。 此dmatch物件具有以下屬性:

•dmatch.distance - 描述符之間的距離。 越低越好。

•dmatch.trainidx - 訓練描述符中描述符的索引

•dmatch.queryidx - 查詢描述符中描述符的索引

•dmatch.imgidx - 訓練影象的索引

opencv python 了解特徵

相信大多數人都玩過拼圖遊戲。你會得到許多零零散散的碎片,然後需要正確地組裝它們以形成乙個大的完整的影象。問題是,你是怎麼做到的?如何將相同的理論應用到電腦程式中,以便計算機可以玩拼圖遊戲?如果計算機可以玩拼圖遊戲,為什麼我們不能給計算機提供很多真實自然景觀的真實影象,並告訴它將所有這些影象拼接成乙個...

opencv python使用SURF特徵點檢測

1.更改環境 遇到問題再改 因為直接執行官方給的 報錯,嘗試更改環境 最新版的opencv會報錯,故把裝了的opencv解除安裝,然後重灌3.4.2,pip uninstall opencv contrib python pip uninstall opencv python conda insta...

OpenCV Python 理解特徵 三十六

在本章中,我們將嘗試理解什麼是特徵,為什麼拐角重要等等 你們大多數人都會玩拼圖遊戲。你會得到很多小影象,需要正確組裝它們以形成大的真實影象。問題是,你怎麼做?將相同的理論投影到電腦程式上,以便計算機可以玩拼圖遊戲呢?如果計算機可以玩拼圖遊戲,為什麼我們不能給計算機提供很多自然風光的真實影象,並告訴計...