OpenCV4.5.1.48匹配对应contrib后调用SURF报属性错误求助
问题根因与解决方案
核心原因
你使用的4.5.1.48版本区间的预编译opencv-contrib-python包,默认关闭了非自由算法编译开关,且当时SURF专利尚未正式过期,即使安装了匹配版本的contrib包也没有内置SURF实现;同时大概率存在多OpenCV包冲突的问题。
分步排查解决
- 第一步:清理所有冲突的OpenCV包
很多用户会同时安装opencv-python和opencv-contrib-python,二者会产生调用冲突,优先加载不含contrib模块的opencv-python,自然找不到xfeatures2d属性。先执行全量卸载命令:pip uninstall -y opencv-python opencv-contrib-python opencv-python-headless opencv-contrib-python-headless - 第二步:两种可选解决路径
路径1(推荐,无需自行编译):升级到OpenCV 4.5.5及以上版本
SURF专利2021年10月正式过期后,OpenCV从4.5.5版本开始将SURF移回主模块,无需依赖contrib包的非自由编译选项。卸载后直接安装高版本contrib包即可:
调用方式直接用:pip install opencv-contrib-python==4.5.5.62import cv2 surf = cv2.SURF_create()路径2(必须用4.5.1版本):自行编译OpenCV+contrib
如果你一定要保留4.5.1版本,需要手动从源码编译OpenCV和对应版本的opencv_contrib,编译时手动开启OPENCV_ENABLE_NONFREE编译选项,才能生成SURF的相关接口,编译完成后使用cv2.xfeatures2d.SURF_create()调用即可。 - 第三步:验证配置
完成安装后先执行以下代码验证:
返回对应版本号和import cv2 print(cv2.__version__) # 4.5.5及以上版本验证 print(hasattr(cv2, 'SURF_create')) # 4.5.1自行编译版本验证 print(hasattr(cv2.xfeatures2d, 'SURF_create'))True即为配置成功。
内容的提问来源于stack exchange,提问作者newtostack
相关产品推荐
相关产品推荐

