AttributeError:模块“cv2.cv2”没有属性“SURF_create”,2.模块“cv2.cv2”没有属性“xfeatures2d”

new*_*ack 2 python opencv surf sift

我正在尝试使用 SIFT 和 SURF。
在我的笔记本电脑上,我有 OpenCV 版本 = 4.5.1.48,还添加了版本 4.5.1.48 的 OpenCV-contrib-python
我在遵循文档后收到错误 SIFT 在遵循文档后完美工作,但 SURF 不起作用并给我错误以下代码

代码1

surf = cv.xfeatures2d.SURF_create()   
AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'
Run Code Online (Sandbox Code Playgroud)

代码2

surf = cv2.SURF_create()   
AttributeError: module 'cv2.cv2' has no attribute 'SURF_create'
Run Code Online (Sandbox Code Playgroud)

在阅读了 Stack Overflow 上的许多答案后,我更改了 OpenCV 的版本并做了很多事情,但没有任何效果对我有用

我也读到专利即将到期,但在我的案例中没有任何效果,请告诉我我是否在某个地方错了

ber*_*rak 11

OpenCV 版本= 4.5.1.48

这可能来自 pypi,并且不包含任何“非自由”代码

(SURF 仍然是专利的,如果你绝对需要它,你必须从 src (使用 contrib 模块)构建,使用 OPENCV_ENABLE_NONFREE=ON cmake 标志)

然而,由于 SIFT 专利去年到期,请使用该专利

sift = cv2.SIFT_create() # it's in main, no more xfeatures2d
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不要同时安装opencv-python 和 opencv-contrib-python,仅安装后者(否则前者将“隐藏”它,并且您不能使用 contrib 模块。这就是原因AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'