属性错误:模块“cv2.cv2”没有属性“xfeatures2d”[Opencv 3.4.3]。

7

我已经安装了opencv 3.4.3(使用pip3 install opencv-pythonpip3 install opencv-python-contrib

当我运行包含以下代码的程序:
sift = cv2.xfeatures2d.SIFT_create()
我得到了以下错误:

AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'

xfeatures2d 函数在 OpenCV 3.4.3 中不再被支持吗?


我在代码开头放置了 import cv2 - singrium
尝试从 cv2.xfeatures2d.SIFT_create() 中删除 cv2。查看文档,所有内容都引用了 cv.xfeature2d 而不是 cv2 - artomason
3
通过使用“pip install opencv-python-contrib”安装的OpenCV pip安装程序不再包含非免费模块,例如SIFT。你需要手动编译OpenCV才能访问它们。或者,你可以在其他地方找到包含它们的安装程序。 - alkasm
@AlexanderReynolds 我会尝试降级Opencv并安装较低版本。我认为这将解决问题,不是吗? - singrium
1
在与@John_Sharp1318的讨论后,我下面的回答是不正确的!他下面的回答确实是实际问题,你应该接受它,以便其他遇到相同问题的人可以看到。然而,你还会遇到我在问题中提到的3.4.3版本的问题,这在这个问题中有所说明。 - alkasm
显示剩余6条评论
4个回答

11
您遇到的错误信息与模块 xfeatures2d 不存在有关。 它与 SIFT 算法或 xfeatures2d 中的任何算法都没有直接关系(所有算法都会发送该错误)。 我建议您重新安装 opencv-contrib-python(pip install opencv-contrib-python),或者如果您正在使用anaconda或等效软件,请从另一个源存储库重新安装两个opencv软件包。 最后一种选择是,如果您熟悉此操作,可以自己编译完整的OpenCV("常规" + contrib)。

希望这能有所帮助。

谢谢,我认为最好的解决方案是从源代码编译opencv和opencv-contrib。 - singrium

10

经过长时间的折磨和安装/编译所有软件包,我需要为其他可能犯与我相同小错误的人发布这篇文章。

如果您的系统中已经安装了opencv-python和opencv-contrib-python,并且仍然遇到此错误,请使用以下命令:

 sift = cv2.xfeatures2d.SIFT_create()

尝试

 sift = cv2.SIFT_create()

6

编辑:我的答案是不正确的。请参见下面的其他答案

我回答的问题与此问题不同(在这里回答),但是,由于您正在使用OpenCV 3.4.3,我认为您也会遇到那个不同的问题。原先在这个答案中的原始文本现在已经放在其他答案中,因为它是解决该问题的正确答案。


谢谢,我会安装一个较低版本的opencv。 - singrium

3

请在您的conda提示符中尝试此操作。

pip3 uninstall opencv-python
pip3 install -U opencv-contrib-python==3.4.2.16

这对我有用:pip3卸载opencv-python,然后pip3安装-U opencv-contrib-python。 - spatak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接