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

Posted

技术标签:

【中文标题】AttributeError:“模块”对象没有属性【英文标题】:AttributeError: 'module' object has no attribute 【发布时间】:2014-03-09 07:17:07 【问题描述】:

我正在尝试获取两个立体图像的深度图。我已从this documentation 获取代码。

我收到以下错误:

Traceback (most recent call last):
  File "depth.py", line 9, in <module>
    stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)
AttributeError: 'module' object has no attribute 'createStereoBM'

我的代码是:

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('tsukuba_l.png',0)
imgR = cv2.imread('tsukuba_r.png',0)

stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

我进入Python行解释器,写了如下代码:

import cv2
help(cv2)

cv2 中没有名为 createStereoBM 的函数。

顶部提供的链接中的代码是否错误?我在 Ubuntu 12.04 中使用 Python 2.7.3。 该代码是否可能适用于 Python 3 及更高版本?

请帮忙。

【问题讨论】:

您使用的代码来自 opencv master/3.0 分支。 (是的,你必须在那里使用 cv2.createStereoBM() 而不是 cv2.StereoBM() )查看更多示例,而不是use the 2.4 branch。 我必须使用 cv2.StereoBM_create() 用于 OpenCV 的 3.0.0-beta 版 【参考方案1】:

cv2.StereoBM_create(numDisparities=16, blockSize=15)

试试看。我的opencv版本是3.2。

如果你想找到任何在opencv中工作的函数,你可以试试这个

    导入(cv2) 帮助(cv2)

【讨论】:

【参考方案2】:

改用这个函数

stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=15)

你可以找到这个函数的文档here

【讨论】:

但不适用于 >= 3.x。这有效:***.com/a/43661169/1797782【参考方案3】:
import numpy as np

import cv2

from matplotlib import pyplot as plt

imgL = cv2.imread('l.png',0)

imgR = cv2.imread('r.png',0)

stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)

disparity = stereo.compute(imgL,imgR)

plt.imshow(disparity,'gray')

plt.show()  

尝试使用此代码是您使用 open-cv 文档中的代码

【讨论】:

【参考方案4】:

您从主干(又名开发)文档中获取示例。如果您没有使用主干版本,请尝试为您的正确版本查找示例。

【讨论】:

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

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

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

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

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

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

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