簡體   English   中英

如何在 OpenCV for Python 中使用 surf 和 sift 檢測器

[英]How to use surf and sift detector in OpenCV for Python

我正在嘗試使用函數 SURF() 進行特征匹配的代碼。 執行時它會給出一個錯誤,說“AttributeError:'module' object has no attribute 'SURF'”。

如何為 Python (Windows) 下載此模塊並修復此錯誤?

您可以在 open cv 中嘗試ORB (Oriented FAST and Rotated Brief)作為 SURF 的替代。 它幾乎和 SURF 和 SIFT 一樣好用,而且它是免費的,不像SIFTSURF專利的,不能用於商業用途。
您可以在此處的opencv-python 文檔中了解更多信息

這是為您提供方便的示例代碼

import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('text.png',cv2.COLOR_BGR2GRAY) # queryImage
img2 = cv2.imread('original.png',cv2.COLOR_BGR2GRAY) # trainImage
# Initiate SIFT detector
orb = cv2.ORB_create()

# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)

# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance) 
# Draw first 10 matches.
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None, flags=2)

plt.imshow(img3),plt.show()

首先

pip install opencv-contrib-python

然后使用此 hack 創建 sift 對象

sift = cv2.xfeatures2d.SIFT_create()
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('simple.jpg',0)
# Initiate FAST object with default values
fast = cv.FastFeatureDetector_create()
# find and draw the keypoints
kp = fast.detect(img,None)
img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
# Print all default params
print( "Threshold: {}".format(fast.getThreshold()) )
print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) )
print( "neighborhood: {}".format(fast.getType()) )
print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) )
cv.imwrite('fast_true.png',img2)
#Disable nonmaxSuppression
fast.setNonmaxSuppression(0)
kp = fast.detect(img,None)
print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
cv.imwrite('fast_false.png',img3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM