OpenCV 特徵匹配 嫌疑犯識別

2021-10-06 04:24:52 字數 1578 閱讀 8750

嫌疑犯的頭像:

找出這個嫌疑犯~

搞定~:

解決思路:

# -*-coding:utf8-*-#

"""第一步:對影象進行灰度化,使用sift.detectandcompute(image, none) 進行ksp關鍵點,dpsift特徵向量的檢測

第二步:構建bmfmatch匹配器,獲得符合條件的匹配值,matches獲得的是ksp關鍵點的匹配值得索引,使用索引獲得符合條件的kspa和kspb

第三步:比值測試,首先獲取與 a距離最近的點 b (最近)和 c (次近),只有當 b/c 小於閥值時(0.75)才被認為是匹配,因為假設匹配

是一一對應的,真正的匹配的理想距離為0

第四步:提取兩幅影象特徵之後,畫出匹配點對連線。

"""import numpy as np

import cv2

from matplotlib import pyplot as plt

img1 = cv2.imread(

'tx.png',0

)img2 = cv2.imread(

'hz2.png',0

)sift = cv2.xfeatures2d.sift_create(

)# 例項化的sift函式

kp1, des1 = sift.detectandcompute(img1,

none

)# 計算出影象的關鍵點和sift特徵向量

kp2, des2 = sift.detectandcompute(img2,

none

)bf = cv2.bfmatcher(

)# 例項化bfm匹配

matches = bf.knnmatch(des1, des2, k=2)

# 找出符合新增的關鍵點的索引

# 比值測試,首先獲取與 a距離最近的點 b (最近)和 c (次近),

# 只有當 b/c 小於閥值時(0.75)才被認為是匹配,

# 因為假設匹配是一一對應的,真正的匹配的理想距離為0

good =

for m, n in matches:

if m.distance <

0.75

* n.distance:

[m])

img3 = cv2.drawmatchesknn(img1,kp1,img2,kp2,good,

none

,flags=2)

# 提取兩幅影象特徵之後,畫出匹配點對連線。

plt.imshow(img3)

, plt.show(

)

這波操作是基於sift進行的角點檢測,若對sift不是很了解,可以看看這篇部落格:

6個嫌疑犯

code using system using system.collections.generic using system.text using system.collections 某地刑偵大隊對涉及六個嫌疑人的一樁疑案進行分析 a b至少有一人作案 a e f三人中至少有兩人參與作案 a d...

匿名黑客公布致使加拿大女孩自殺的嫌疑犯

一名15歲的加拿大女孩因遭人威脅欺凌而於上週自殺,匿名組織之後公布了導致女孩自殺的 名字和位址,這位男子隨後受到了其他人發出的恐嚇,宣稱要行使 維吉蘭特正義 vigilante justice,即私法 amanda todd自殺前乙個月在youtube上上傳了一則 以手寫字形式解釋她的遭遇 7年級時...

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...