Python 属性错误:'module' 对象没有属性 'DIST_L2

14 投票
5 回答
19683 浏览
提问于 2025-04-18 08:31

我在用Python尝试使用cv2.distanceTransform()这个方法。但是在运行以下代码时遇到了一个错误:

dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)

运行这段代码时,我得到了以下错误信息:

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

之前也有人问过类似的问题,我知道这个问题通常发生在你导入了一个叫'something'的东西,而你的Python文件名也叫'something.py'。不过,我的Python文件名是segment3.py。

有没有人能帮我解决这个问题?我正在尝试使用分水岭算法进行图像分割。我是在Fedora20系统上工作的。非常感谢!

5 个回答

0

cv2.cv.CV_DIST_L2可以用来替代其他方法。

3

在完成这个教程时,你可能会遇到下一个问题,就是 cv2.connectedComponents 这个功能不可用。你可以查看这个链接了解更多信息:OpenCV for Python - AttributeError: 'module' object has no attribute 'connectedComponents'

解决这个问题的方法是安装 opencv3,你可以通过 Anaconda 很简单地做到这一点,使用下面的命令:

conda install -c https://conda.binstar.org/menpo opencv3
11

这个回复有点晚,不过为了顺利完成你正在做的教程,你确实需要安装 openCV 3.0。这样教程里的语法才是正确的。

关于 openCV 3.0:

dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)

关于 openCV 2.x:

dist_transform = cv2.distanceTransform(opening, cv2.cv.CV_DIST_L2, 5)
15

不要用 cv2.DIST_L2,用这个:

cv2.cv.CV_DIST_L2

我之前也遇到过同样的问题,不过经过一些研究,我发现文档里提到一个示例文件在源代码中(opencv_source/samples/python2/distrans.py),它使用了这个常量。我在这里测试了一下,效果如预期。

24

应该改写成下面这样:

(dist_transform, labels) = cv2.distanceTransform(opening,cv2.cv.CV_DIST_L2,5) 

撰写回答