import cv2
import numpy as np
# read img
img_org = cv2.imread(r'D:\img\0000.jpg',cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img_org,cv2.COLOR_BGR2GRAY)
cv2.imshow('ogrigin',img_org)
# SIFT
detector = cv2.SIFT()
keypoints = detector.detect(gray,None)
img = cv2.drawKeypoints(gray,keypoints)
cv2.imshow('test',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
上面是一小段代码,运行时会出现 AttributeError: module 'cv2.cv2' has no attribute 'SIFT'错误,后来发现时由于opencv把SIFT等算法整合到xfeatures2d里面了,代码如下
import cv2
import numpy as np
# read img
img_org = cv2.imread(r'D:\img\0000.jpg',cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img_org,cv2.COLOR_BGR2GRAY)
cv2.imshow('ogrigin',img_org)
# SIFT
detector = cv2.xfeatures2d.SIFT_create()
keypoints = detector.detect(gray,None)
img = cv2.drawKeypoints(gray,keypoints)
cv2.imshow('test',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行时又出现了AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'的问题查询后发现时因为python3以后的OpenCv只是包含了不放呢内容,需要神经网络或者其他函数就需要导入opencv_contrib,我们只需要用pip安装opencv-contrib-python就可以解决问题。然而后续又出现了这样的问题
OpenCV(3.4.4) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘cv::xfeatures2d::SIFT::create’
将opencv版本退到3.4.2即可解决。