2014-07-11 43 views
10

我用下面的教程OpenCV的努力分水岭算法: https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_watershed/py_watershed.html#watershedOpenCV的Python的 - AttributeError的:“模块”对象有没有属性“connectedComponents”

我已经修正了错误,现在的代码看起来像这样的:

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

img = cv2.imread(argv[1]) 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) 

# noise removal 
kernel = np.ones((3,3),np.uint8) 
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2) 

# sure background area 
sure_bg = cv2.dilate(opening,kernel,iterations=3) 

# Finding sure foreground area 
dist_transform = cv2.distanceTransform(opening,cv2.cv.CV_DIST_L2,5) 
ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0) 

# Finding unknown region 
sure_fg = np.uint8(sure_fg) 
unknown = cv2.subtract(sure_bg,sure_fg) 

# Marker labelling 
ret, markers = cv2.connectedComponents(sure_fg) 

# Add one to all labels so that sure background is not 0, but 1 
markers = markers+1 

# Now, mark the region of unknown with zero 
markers[unknown==255] = 0 

markers = cv2.watershed(img,markers) 
img[markers == -1] = [255,0,0] 

cv2.imwrite("watershed_img.png",img) 
cv2.imwrite("watershed_markers.png",markers) 

当我尝试运行它,我收到以下错误(文件名是 “watersh.py”):

Traceback (most recent call last): 
File "watersh.py", line 26, in <module> 
ret, markers = cv2.connectedComponents(sure_fg) 
AttributeError: 'module' object has no attribute 'connectedComponents' 

我FO

http://docs.opencv.org/trunk/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=connected

我的问题是,是有它的实现另一个名字,或不使用Python都存在:存在于OpenCV中的C++库中的函数UND?如果不是,我该如何解决这个错误?

编辑:我使用的OpenCV 2.4.9

回答

12

对于任何搜索这一点,答案是我的OpenCV 2.9从Sourceforge,但我需要从他们的回购3.0版本上的git此功能工作。

+2

你的opencv仍然像cv2一样行事?或需要使用cv3? – user391339

+3

有没有一种方法可以和2.9一起使用,以实现相同的目标?我不想花一个下午的时间设置3.0来完成一个啧啧... – kuanb

相关问题