2013-04-22 8 views
6

Ho cercato di trovare contorno con la biblioteca cv2 pitone in un'immagine scheletrato creato scikit-immagine con e ho ottenuto questo errore:Come posso convertire immagini da scikit-image in opencv2 e altre librerie?

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

La mia domanda è: che cosa devo fare per convertire in CV2 e viceversa?

so che tipo di uso OpenCV numpy.uint8 per rappresentare immagini binarie invece scikit-immagine numpy.float64

ho usato anche mahotas (numpy.bool) e le librerie pymorph. Come posso convertire da scikit-image a queste librerie e viceversa?

+0

penso mi sono trovato una soluzione! Se uso: skel = np.array (skel, dtype = np.uint8) mi converto facilmente in tipo opencv2 e così via per altre librerie! – improc

+0

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

risposta

11

scikit-image fornisce routine di conversione tra i diversi tipi di dati che anche conserva correttamente il ridimensionamento:

from skimage import img_as_ubyte 

cv_image = img_as_ubyte(any_skimage_image) 

Aggiornamento: il manuale d'uso scikit-immagine ha ora una sezione più dettagliata su questo: http://scikit-image.org/docs/stable/user_guide/data_types.html#working-with-opencv

+1

Quale sarebbe la variante viceversa: da cv_image a skimage? –

+2

Se cv_image è una matrice di byte senza segno, skimage lo capirà per impostazione predefinita. Se preferisci lavorare con immagini in virgola mobile, 'img_as_float' dovrebbe fare il trucco. Vedere la guida per l'utente skimage per ulteriori informazioni. –

+0

Inoltre, chiunque abbia bisogno di queste conversioni, ricorda che OpenCV usa lo spazio colore BGR di default mentre Skimage usa quello RGB :-) –