我正在使用opencv 2.4.11和python 2.7进行计算机视觉项目。 
我正在尝试获取SIFT描述符:


 ima = cv2.imread('image.jpg')
 gray = cv2 .cvtColor(ima,cv2.COLOR_BGR2GRAY)

 detector = cv2.FeatureDetector_create('SIFT')#或'SURF'为此事
 descriptor = cv2.DescriptorExtractor_create('SIFT')&# xA;
 kpts = detector.detect(灰色)



 当调用最后一条指令时,它会抛出一个丑陋的分段错误。我必须使用2.4.x版本,因此上传到openxv的3.x版本以使用SIFT或SURF方法不是一种选择。我之前使用sudo make uninstall从3.1降级并从0开始安装了实际的opencv版本。


有没有人知道为什么会这样?

答案 0 :(得分:2)
尝试:
import cv2
ima = cv2.imread('image.jpg')
gray = cv2.cvtColor(ima, cv2.COLOR_BGR2GRAY)
detector = cv2.SIFT()
kp1, des1 = detector.detectAndCompute(gray, None)
detector = cv2.FeatureDetector_create('SIFT')
也适用于创建SIFT对象。
答案 1 :(得分:0)
目前我是计算机科学的初学者,所以为我的简短解释道歉。 我有OpenCV 3和Python 2.7.11 在我没有下载之前,你最好先阅读this site 毕竟你可以编写这段代码(它与你的代码差不多)。
import cv2
import numpy as np
img = cv2.imread('lenna.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
detector = sift.detect(gray, None)
kpts, des = sift.compute(gray, detector)
# kpts,des=descriptor.compute(gray,kpts)
im_with_keypoints = cv2.drawKeypoints(gray, kpts, np.array([]), color=255, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey()
问候!
答案 2 :(得分:-1)
使用
安装opencv_contribpip install opencv-contrib-python
然后你的代码就可以了。