我正在尝试使用OpenCV从图像中提取SURF描述符。我使用的是Python2.4和OpenCV 2.7,但是我很难找到任何文档来提供有关如何使用这些函数的信息。我已经能够使用以下代码来提取特征,但我找不到任何合理的方法来提取描述符:
import cv2
img = cv2.imread("im1.jpg")
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
surf = cv2.FeatureDetector_create('SURF')
detector = cv2.GridAdaptedFeatureDetector(surf, 50) # max number of features
fs = detector.detect(img2)
我尝试提取描述符的代码是:
import cv2
img = cv2.imread("im3.jpg")
sd = cv2.FeatureDetector_create("SURF")
surf = cv2.DescriptorExtractor_create("SURF")
keypoints = []
fs = surf.compute(img, keypoints) # returns empty result
sd.detect(img) # segmentation faults
有没有人有做这类事情的样例代码,或者指向提供样例的文档的指针?
发布于 2012-05-30 01:41:28
下面是我为使用Python2.7和OpenCV 2.4提取SURF特征而编写的一些代码示例。
im2 = cv2.imread(imgPath)
im = cv2.cvtColor(im2, cv2.COLOR_BGR2GRAY)
surfDetector = cv2.FeatureDetector_create("SURF")
surfDescriptorExtractor = cv2.DescriptorExtractor_create("SURF")
keypoints = surfDetector.detect(im)
(keypoints, descriptors) = surfDescriptorExtractor.compute(im,keypoints)
这是可行的,并返回一组描述符。不幸的是,由于cv2.SURF()在2.4中不起作用,您必须经历这个繁琐的过程。
发布于 2012-05-29 21:12:49
这是我最近为uni编写的一小段代码。它从摄像机捕获图像,并在输出图像上实时显示检测到的关键点。我希望它对你有用。
这里有一些文档here。
代码:
import cv2
#Create object to read images from camera 0
cam = cv2.VideoCapture(0)
#Initialize SURF object
surf = cv2.SURF(85)
#Set desired radius
rad = 2
while True:
#Get image from webcam and convert to greyscale
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Detect keypoints and descriptors in greyscale image
keypoints, descriptors = surf.detect(gray, None, False)
#Draw a small red circle with the desired radius
#at the (x, y) location for each feature found
for kp in keypoints:
x = int(kp.pt[0])
y = int(kp.pt[1])
cv2.circle(img, (x, y), rad, (0, 0, 255))
#Display colour image with detected features
cv2.imshow("features", img)
#Sleep infinite loop for ~10ms
#Exit if user presses <Esc>
if cv2.waitKey(10) == 27:
break
发布于 2012-11-29 18:02:43
使用open cv 2.4.3,您可以执行以下操作:
import cv2
surf = cv2.SURF()
keypoints, descriptors = surf.detectAndCompute(img,None,useProvidedKeypoints = True)
https://stackoverflow.com/questions/10799625
复制相似问题