AttributeError:“模块”对象没有属性“xfeatures2d”[Python/OpenCV 2.4]

Posted

技术标签:

【中文标题】AttributeError:“模块”对象没有属性“xfeatures2d”[Python/OpenCV 2.4]【英文标题】:AttributeError: 'module' object has no attribute 'xfeatures2d' [Python/OpenCV 2.4] 【发布时间】:2016-08-30 13:40:50 【问题描述】:

这一行:

sift = cv2.xfeatures2d.SIFT_create()

返回错误:

Traceback (most recent call last):
  File "C:/Python27/openCVskrypty/GUI/SOLUTION2.py", line 11, in <module>
    sift = cv2.xfeatures2d.SIFT_create()
AttributeError: 'module' object has no attribute 'xfeatures2d'

我读到了一些关于这个错误的信息,它出现在 OpenCV 3.0 版中。 这很奇怪,因为我有 2.4.11 版本。

我检查了 dir(cv2) 并且我没有 xfeatures2d 模块。有谁知道为什么?可以单独下载吗?

感谢您帮助解决此问题。

【问题讨论】:

【参考方案1】:

在最新的 CV2 版本 4.5.3.56 中,这有效:

img1 = cv2.imread(r'C:\Users\CW\Desktop\new_img.png') 
sift = cv2.SIFT_create() 
kp1, des1 = sift.detectAndCompute(img1, None)

【讨论】:

仅代码答案不被视为良好做法。请考虑Explaining how this answers the question【参考方案2】:

对于 CV2 版本 4.5.1,此方法有效

sift = cv2.SIFT_create()
kp = sift.detect(gimg,None)
img=cv2.drawKeypoints(gimg,kp,img)
plt.imshow(img)

【讨论】:

github.com/HeatherJiaZG/SuperGlue-pytorch/issues/13 对我来说也适用于 opencv-python==4.5.3.56 和 opencv-contrib-python==4.5.3.56 @Usama gimg 是什么? @SyedHussain 这是灰色图像。【参考方案3】:

打开 Powershell 提示并键入以下命令:

pip install --user opencv-contrib-python

帮我修好了。

如果您使用的是 Jupyter Notebook,请打开 Ananconda Powershell 提示。

【讨论】:

【参考方案4】:

执行命令后:

pip install opencv-contrib-python

,我收到以下错误:

错误:OpenCV(4.0.0) /Users/rene/build/skvark/opencv-python/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1207: 错误:(-213:功能/特性未实现)此算法 已获得专利且不包含在此配置中;放 OPENCV_ENABLE_NONFREE CMake 选项并在函数中重建库 '创造'

可以在 anaconda 中使用以下命令解决:

conda install -c menpo opencv

或者用 pip:

pip install opencv-python==3.4.2.17

pip install opencv-contrib-python==3.4.2.17

【讨论】:

找不到匹配的分布 应该是pip install opencv-python==3.4.2.17pip install opencv-contrib-python==3.4.2.17 如果您想使用 SIFT 或 SURF,请安装 3.4.2.16。 (已测试)***.com/questions/52305578/…【参考方案5】:

由于美国专利问题,它不适用于 OpenCV 4.0。也许我们应该为 OpenSift 的努力点赞:

https://github.com/robwhess/opensift

【讨论】:

【参考方案6】:

我收到此错误,我所做的只是卸载 opencv 包并按以下顺序安装它们。

步骤

通过running as administrator打开Anaconda Prompt并输入以下命令。

$ pip uninstall opencv-python

$ pip uninstall opencv-contrib-python

然后键入以下命令

$ pip install opencv-contrib-python==3.4.2.16

$ pip install opencv-python==3.4.2.16

这解决了我的问题。希望这能解决你的问题。!!??

【讨论】:

【参考方案7】:

我遇到了同样的错误...我使用cv2.__version__cv2.__path__ 来检查opencv 版本和路径。然后我从 site-packages 中删除了 cv2。并安装以下

pip install opencv-python==3.4.2.17

pip install opencv-contrib-python==3.4.2.17

【讨论】:

这是最新版本的安装顺序。 找不到匹配的分布 您必须将 open cv 的发行版本修改为最新版本。目前它的 4.1.2.30。【参考方案8】:

我曾经遇到过与@srihegde 说的类似的问题,您可以尝试卸载 opencv-contrib-python 软件包并重新安装。你也可以尝试卸载 opencv-python 包,如果你有的话,因为它也可能会弄乱包。

这对我有帮助。

卸载:

pip3 uninstall opencv-contrib-python
pip3 uninstall opencv-python

然后安装:

pip3 install opencv-contrib-python
pip3 install opencv-python

【讨论】:

我只需要安装部分:【参考方案9】:

SIFT 是一种专利算法,因此并非在每个 open-cv 版本中都可用。您可以做的是同时安装opencv及其contrib部分,即

pip install opencv-python==3.3.0.10 opencv-contrib-python==3.3.0.10

SIFT 在以上版本的 opencv 上对我来说效果很好。

【讨论】:

您甚至可以升级到3.4.2.17 并仍然使用 SIFT。 至少对我来说,cv2.xfeatures2d.SIFT_create() 只适用于 3.3.0.10 错误:没有为 opencv-python==3.3.0.10 找到匹配的分布 版本 3.3.0.10 现在不可用,下一个版本是 3.4.2.16 并且能够与 sift=cv2.xfeatures2d.SIFT_create() 一起使用。我还必须做 pip3 install opencv-python sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install python3-pyqt5 sudo apt install libqt4-test跨度> 仅通过使用cv2.SIFT_create() 即可在较新的版本中使用。我正在使用 opencv 4.5.4 rn【参考方案10】:

OpenCV 3+ 也可能出现此错误,因为它是由 OpenCV 和 OpenCV-Contrib 包的版本不匹配引起的。

我有 OpenCV 3.4.1 版和 OpenCV-Contrib 3.4.0 版。我用 OpenCV-Contrib 尝试了以下操作:

卸载 OpenCV-Contrib 包:

$ pip uninstall opencv-contrib-python

然后再次安装:

$ pip install opencv-contrib-python

pip 会自动获取并安装最新的兼容版本。

【讨论】:

【参考方案11】:

我认为你应该安装 opencv-contrib-python。您正在使用的模块在 opencv-python 中不受支持。见opencv-contrib-python。

安装:

pip install opencv-contrib-python

【讨论】:

对于那些使用 OpenCV 3+ 并看到 AttributeError: 'module' object has no attribute 'xfeatures2d' 的人来说,这可能是正确的解决方案 你有没有试过先卸载之前的OpenCV?【参考方案12】:

您可以改用这个:

sift=cv2.SIFT()

【讨论】:

【参考方案13】:

问题在于您的 OpenCV 版本。您说您使用的是 2.4.11 版本,但此版本的 OpenCV 没有此方法可用。

您可以查看documentation。它有features2d

而 OpenCV 3.0 可以。

【讨论】:

感谢您的回答。是否必须下载v.3.0 OpenCV,可以单独下载这个模块吗?

以上是关于AttributeError:“模块”对象没有属性“xfeatures2d”[Python/OpenCV 2.4]的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“模块”对象没有属性

AttributeError:“模块”对象没有属性“百分位”

AttributeError:“模块”对象没有属性

无法安装模块 - AttributeError: 'NoneType' 对象没有属性 'loader'

AttributeError:“模块”对象没有属性“urlopen”

AttributeError:“模块”对象没有属性“ORB”