AttributeError: module 'cv2.cv2' has no attribute 'SURF_create' , 2. module 'cv2.cv2' has no attribute 'xfeatures2d'

AttributeError: module 'cv2.cv2' has no attribute 'SURF_create' , 2. module 'cv2.cv2' has no attribute 'xfeatures2d'

我是 OpenCV 的新手,正在尝试将 SIFT 和 SURF 用于项目。
在我的笔记本电脑上,我有 OpenCV version= 4.5.1.48 并且还添加了 OpenCV-contrib-python of version 4.5.1.48
目前我面临的问题是我在遵循文档后遇到的错误 SIFT 在遵循文档后完美运行,但 SURF 不工作并给我以下代码的错误

代码 1
冲浪 = cv.xfeatures2d.SURF_create()
AttributeError:模块 'cv2.cv2' 没有属性 'xfeatures2d'

代码 2
冲浪 = cv2.SURF_create()
AttributeError: 模块 'cv2.cv2' 没有属性 'SURF_create'

在阅读了关于 Stack overflow 的许多答案后,我更改了 OpenCV 的版本并做了很多事情,但对我来说没有任何效果
我是新手,请有人指导我完成这个
我也读到过专利到期的消息,但我的情况没有任何效果请告诉我,如果我哪里错了 提前致谢

OpenCV version= 4.5.1.48

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

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

然而,由于 SIFT 专利于去年到期,因此请改用它

sift = cv2.SIFT_create() # it's in main, no more xfeatures2d

顺便说一句,不要安装 both opencv-python 和 opencv-contrib-python,只安装后者(否则前者会“隐藏”它,你不能使用 contrib 模块。这就是 AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d')

的原因

由于专利原因,opencv 4.5.1.48 不包含整个算法

您可以使用 Python3.6(或 Python3.7 也许可以)并安装 opencv-pyhton==3.4.2.16opencv-contrib-python==3.4.2.16,然后您可以使用以下功能:

surf = cv2.xfeatures2d.SURF_create() 要么 sift = cv2.xfeatures2d.SIFT_create()