2014-07-11 24 views
10

Próbuję algorytmu przełomowym stosując następujący poradnik dla OpenCV: https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_watershed/py_watershed.html#watershedOpenCV dla Pythona - AttributeError: „moduł” obiekt ma atrybut „connectedComponents”

już naprawiono błąd, teraz kod wygląda to:

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) 

Kiedy próbuję go uruchomić, mam następujący komunikat o błędzie (nazwa pliku to "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' 

I fo und że istnieje funkcja w C++ biblioteki OpenCV:

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

Moje pytanie brzmi, czy jest to implementacja dla niego pod inną nazwą lub nie istnieje w ogóle w Pythonie? Jeśli nie, jak mogę rozwiązać ten błąd?

edit: Używam OpenCV 2.4.9

Odpowiedz

12

Dla każdego szukasz tego, odpowiedź jest taka, że ​​miałem OpenCV 2.9 z Sourceforge, ale potrzebowałem wersji z 3.0 na swoim repo git do tej funkcji praca.

+2

Czy twój opencv nadal zachowuje się tak samo jak z cv2? lub potrzebujesz użyć cv3? – user391339

+3

Czy istnieje metoda, która może być używana z wersją 2.9, która skutecznie umożliwiłaby osiągnięcie tego samego celu? Nie chcę spędzać popołudnia na tworzeniu wersji 3.0 tylko po to, aby ukończyć tut ... – kuanb

Powiązane problemy