属性错误:'模块'对象没有属性'xfeatures2d'?

4

我想在OpenCV中使用SIFT函数,当我执行以下操作时:

cv2.xfeatures2d

我理解为:

AttributeError: 'module' object has no attribute 'xfeatures2d'

即使cv2.SIFT()不起作用,但是似乎这个方法可以解决问题:

cv2.orb_create()

我使用的是opencv-contrib-python版本为3.3.0,尝试过使用opencv-python,但仍然出现了相同错误。

我已经尝试通过pip卸载和重新安装,我的操作系统是osx。


1
opencv-python 是主要模块,而 opencv-contrib-python 是附加模块(包含 nonfree 如 SIFT)。您应该安装它们全部。确保您真正已经安装了它们全部。同时确保您已经打开了正确的 Python(已安装 OpenCV)。 - Kinght 金
我已经安装了它们两个,但仍然出现相同的错误,还有其他建议吗? - LoveMeow
我正在使用系统版本的Python 2.7.1,没有安装其他版本。 - LoveMeow
1个回答

4

首先安装 opencv-pythonopencv-contrib-python:

对于 Python2:

$(sudo) python2 -m pip install opencv-python opencv-contrib-python

Python3版本:

$(sudo) python3 -m pip install opencv-python opencv-contrib-python

然后再次调用。对于OpenCV 3.x,使用cv2.xfeatures2d.SIFT_create()来创建:
$ python
>>> import cv2 
>>> cv2.__version__
'3.3.0-dev'
>>> sift = cv2.xfeatures2d.SIFT_create()
>>> sift
<xfeatures2d_SIFT 0x7f79ca721d10>

不要混合使用这两个包。opencv-python 包含主要的 OpenCV 模块。opencv-contrib-python 包含主要模块和 contrib 模块。这两个包使用相同的命名空间,安装其中一个可能会导致问题。如果需要 SIFT,只需执行 pip install opencv-contrib-python 即可。 - skvark
我再次阅读了 opencv-contrib-python 的文档,https://pypi.python.org/pypi/opencv-contrib-python,发现你是正确的,后者包含前者。我自己编译了OpenCV,对此很熟悉。 - Kinght 金

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