Python 属性错误:'module' 对象没有属性 'DIST_L2
我在用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 个回答
cv2.cv.CV_DIST_L2可以用来替代其他方法。
在完成这个教程时,你可能会遇到下一个问题,就是 cv2.connectedComponents
这个功能不可用。你可以查看这个链接了解更多信息:OpenCV for Python - AttributeError: 'module' object has no attribute 'connectedComponents'。
解决这个问题的方法是安装 opencv3,你可以通过 Anaconda 很简单地做到这一点,使用下面的命令:
conda install -c https://conda.binstar.org/menpo opencv3
这个回复有点晚,不过为了顺利完成你正在做的教程,你确实需要安装 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)
不要用 cv2.DIST_L2
,用这个:
cv2.cv.CV_DIST_L2
我之前也遇到过同样的问题,不过经过一些研究,我发现文档里提到一个示例文件在源代码中(opencv_source/samples/python2/distrans.py),它使用了这个常量。我在这里测试了一下,效果如预期。
应该改写成下面这样:
(dist_transform, labels) = cv2.distanceTransform(opening,cv2.cv.CV_DIST_L2,5)