2012-02-03 24 views
6

Ho pettinato il Web cercando un modo per ottenere i collegamenti di estrazione/descrittore di caratteristiche OpenCV 2.3.1a per sputare qualsiasi sapore di caratteristiche/descrittori di immagine (STAR ​​/ SURF/ORB/SIFT/VELOCE). .. Sono ben consapevole che OpenCV ha un metodo chiamato "goodFeaturesToTrack Questo non mi aiuta, come non ci sono dotate di descrittori (che è quello che ho davvero bisogno) Ho seguito la documentazione come elencato qui:Rilevamento di caratteristiche in OpenCV Python Binding

http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html

Nulla sembra funzionare, ho provato tutti i tipi di descrittori/funzionalità.Ho provato a utilizzare immagini a canale singolo e multiplo (ad esempio a colori e in bianco e nero) e più formati di immagine (8 bit e 32 f). ha lavorato con la distribuzione corrente e costruendo i binding dal repository di origine.La maggior parte dei metodi genera un errore "unknown non è un array numpy" Ecco un esempio:

SimpleCV:1>import cv2 
SimpleCV:2>img = Image("aerospace.jpg") 
SimpleCV:3>bwimg = img._getGrayscaleBitmap() 
SimpleCV:4>bwimg 
SimpleCV:4><iplimage(nChannels=1 width=600 height=400 widthStep=600)> 
SimpleCV:5>surfer = cv2.SURF(0.5,4,2,False,False) 
SimpleCV:6>points = surfer.detect(bwimg,None) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 

/Library/Python/2.6/site-packages/SimpleCV-1.2-py2.6.egg/SimpleCV/Shell/Shell.pyc in <module>() 
- 

TypeError: <unknown> is not a numpy array 
SimpleCV:7> 

Vale la pena notare che sto utilizzando SimpleCV per caricare l'immagine, ma il metodo _getGrayscaleBitmap() restituisce l'immagine IPL a 8 bit grigia utilizzata da OpenCV. Sono sicuro che funziona come lo uso con centinaia di altri metodi OpenCV senza incidenza.

Così chiunque può indicarmi un LAVORO esempio di questo codice sul web. Ho setacciato dozzine di esempi e non ho trovato nulla che funzioni.

+0

Per quello che vale ho inviato questo biglietto a Willow Garage, ma mi piacerebbe trovare una soluzione AL PIÙ PRESTO. https://code.ros.org/trac/opencv/ticket/1582 – kscottz

risposta

10

Kat, questo funziona per me:

s = cv2.SURF() 
mask = uint8(ones(gray.shape)) 
keypoints = s.detect(gray,mask) 

posso tracciare i punti chiave e tutti. Per ottenere i descrittori si può provare questo

k,d = s.detect(gray,mask,False) 
d = d.reshape((-1,128)) 
print d.shape, len(k) 

d dovrebbe avere la stessa lunghezza la lista dei punti chiave.

ho questo esempio nel capitolo OpenCV qui: http://www.maths.lth.se/matematiklth/personal/solem/book.html

+1

Ancora ricevendo l'errore. Puoi farmi un favore e dirmi il tipo di immagine grigia? sembra una matrice numpy. I tipi di immagine cvMat e IPL non funzionano? – kscottz

+0

Va bene da simplecv Questo appare come esso funzionerà: grigio = uint8 (. Np.array (cv.GetMat (img._getGrayscaleBitmap())) trasporre()) Mi ci vorrà un giorno o due per fare un verifica teorica. – kscottz

+0

Sì, è una matrice uint8 numpy. Le associazioni di python cv2 hanno bisogno di un po 'di lavoro, molte delle caratteristiche non sembrano ancora essere implementate. –

0

Sembra di avere un'immagine di PIL. Prova a convertire in un'immagine numpy: npImage = np.array (img)

Problemi correlati