2013-04-22 9 views
6

Starałem się znaleźć kontur z biblioteką CV2 Pythona w szkiele- obrazu utworzonego z scikit wizerunku i mam ten błąd:Jak mogę konwertować obrazy z obrazu scikit do opencv2 i innych bibliotek?

contours, hierarchy = cv2.findContours(skel,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
TypeError: <unknown> data type = 0 is not supported 

Moje pytanie brzmi: Co mam zrobić, aby przekonwertować do CV2 i na odwrót?

wiem, że typ wykorzystanie OpenCV numpy.uint8 do reprezentowania obrazów binarnych zamiast scikit-image numpy.float64

użyłem również mahotas (numpy.bool) oraz bibliotek pymorph. Jak mogę przekonwertować obraz scikitowy na te biblioteki i viceversa?

+0

myślę znalazłem rozwiązanie! Jeśli używam: skel = np.array (skel, dtype = np.uint8) mogę łatwo przekonwertować w typie opencv2 i tak dalej dla innych bibliotek! – improc

+0

http://scikit-image.org/docs/dev/user_guide/data_types.html#using-an-image-from-skimage-with-opencv – tidy

Odpowiedz

11

scikit-image zapewnia procedury konwersji pomiędzy różnymi danych typów, które również prawidłowo zabezpieczający je skalowania:

from skimage import img_as_ubyte 

cv_image = img_as_ubyte(any_skimage_image) 

Update: instrukcja scikit-image ma teraz bardziej szczegółowy przekrój na ten temat: http://scikit-image.org/docs/stable/user_guide/data_types.html#working-with-opencv

+1

Jaki byłby wariant odwrotny: od cv_image do skimage? –

+2

Jeśli cv_image jest tablicą niepodpisanych bajtów, domyślnie program skimage będzie ją rozumiał. Jeśli wolisz pracować z obrazami zmiennoprzecinkowymi, 'img_as_float' powinno wystarczyć. Więcej informacji można znaleźć w podręczniku użytkownika skimage. –

+0

Ktokolwiek będzie potrzebować tych konwersji, pamiętaj, że OpenCV używa domyślnie przestrzeni kolorów BGR, podczas gdy Skimage używa RGB :-) –

Powiązane problemy