我正在尝试使用OpenCV的SIFT进行图像对象识别,所以我从以下代码开始测试环境:
import cv2
img = cv2.imread('../input/train_2/2.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp)
cv2.imwrite('sift_keypoints.jpg',img)
当我运行代码时,我收到此错误:
属性错误:模块"cv2"没有属性"xfeatures2d"
似乎安装的OpenCV软件包不支持SIFT。我该如何解决它?
SIFT是opencv-contrib软件包的一部分,OpenCV软件包不包含实验性和非自由模块 - 所以请注意许可,所以...
你应该用额外的模块构建opencv,你需要:
- 下载或克隆 opencv-contrib
- 在 cmake 命令行中使用此标志:
cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <other_flags> <opencv_source_directory>