2014-07-11 32 views
10

Sto cercando l'algoritmo spartiacque utilizzando il seguente tutorial per OpenCV: https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_watershed/py_watershed.html#watershedOpenCV per Python - AttributeError: 'modulo' oggetto non ha attributo 'connectedComponents'

ho già fissato un errore, ora il codice è simile questo:

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) 

Quando provo a farlo funzionare, ricevo il seguente errore (il nome del file è "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' 

io fo und che la funzione esistente nella libreria C++ di OpenCV:

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

La mia domanda è: esiste un'implementazione per esso con un altro nome o non esiste affatto in Python? In caso contrario, come posso risolvere l'errore?

edit: sto utilizzando OpenCV 2.4.9

risposta

12

Per chiunque ricerca di questo, la risposta è che ho avuto OpenCV 2.9 da Sourceforge, ma avevo bisogno la versione 3.0 del loro repo su git per questa funzione per lavoro.

+2

si comporta ancora il tuo opencv come con cv2? o hai bisogno di usare cv3? – user391339

+3

Esiste un metodo che può essere utilizzato con 2.9 che possa effettivamente raggiungere lo stesso obiettivo? Non voglio passare un pomeriggio a preparare 3.0 solo per completare un tut ... – kuanb

Problemi correlati