OpenCV 3.4.1中无法找到SIFT及xfeatures2d模块的问题求助
解决OpenCV 3.4.1中SIFT相关的AttributeError问题
你遇到的问题核心是OpenCV 3.x版本中专利算法模块的安装缺失,我来帮你一步步梳理解决:
问题根源
在OpenCV 3.x版本里,SIFT、SURF这类受专利保护的特征提取算法,并没有包含在默认的opencv-python核心包中,而是被放在了扩展模块opencv-contrib-python里。你之前两种写法报错的原因分别是:
cv2.SIFT_create():这是OpenCV 4.x及以后的写法(4.x开始SIFT专利过期,被移到了核心模块),3.x版本不支持这种调用方式。cv2.xfeatures2d.SIFT_create():这个写法本身是对的,但你没安装对应的opencv-contrib-python扩展包,所以找不到xfeatures2d模块。
具体解决步骤
先卸载现有不匹配的OpenCV包
避免版本冲突,先把已装的opencv相关包彻底卸载:pip uninstall opencv-python opencv-contrib-python -y安装对应版本的核心包和扩展包
必须保证opencv-python和opencv-contrib-python的版本完全一致(这里选择3.4.1的稳定子版本15):pip install opencv-python==3.4.1.15 opencv-contrib-python==3.4.1.15如果你用的是conda环境,替换成以下命令:
conda uninstall opencv -y conda install -c conda-forge opencv=3.4.1 opencv-contrib=3.4.1验证代码
安装完成后,重新运行你的代码:import cv2 # 现在应该可以正常初始化SIFT了 sift = cv2.xfeatures2d.SIFT_create()
这样就能解决你遇到的两个AttributeError问题了。
内容的提问来源于stack exchange,提问作者David Lie
相关产品推荐
相关产品推荐

