2012-01-31 11 views
12

Sto cercando di implementare un software di riconoscimento targhe utilizzando le idee di http://iamabhik.wordpress.com/category/opencv/.Come copiare un'area dell'immagine usando opencv in python?

Ho implementato la posizione della lastra usando opencv in python, usando "import cv2". Funziona bene e ora ho bisogno di copiare la regione della piastra su un'altra immagine per fare la segmentazione dei caratteri e quindi la parte OCR (magari usando una rete neurale).

Ho trovato la funzione GetSubRect() per copiare o isolare parte dell'immagine ma non sembra disponibile in python. C'è un'alternativa? Le funzioni di ROI non sembrano essere implementate neanche.

Esiste una documentazione aggiornata dell'interfaccia python su opencv?

Ho compilato opencv dal repository svn (revisione 7239) su un ambiente Debian wheezy/sid.

Sono stato libero di suggerire metodi/idee alternative per risolvere questo problema.

Grazie in anticipo.

risposta

42

Entrambe le funzioni cv.GetSubRect e ROI sono disponibili in Python, ma nella vecchia modalità import cv o import cv2.cv. vale a dire utilizzare cv2.cv.GetSubRect() o cv2.cv.SetImageROI se si è familiari con loro.

D'altra parte, è semplice impostare ROI senza queste funzioni a causa dell'integrazione numpy nel nuovo cv2.

Se (x1, y1) e (x2, y2) sono i due vertici opposti della piastra si è ottenuto, quindi è sufficiente utilizzare la funzione:

roi = gray[y1:y2, x1:x2] 

che è il ROI immagine.

Quindi scegli quello che ti soddisfa.

+1

ero tenta di utilizzare SetImageROI, ma nella mia versione OpenCV (2.4.1) non funziona - copia da (0,0) punta sempre. Slice ndarray è una soluzione molto chiara e buona. Grazie. – Xeningem

+0

Ho avuto lo stesso problema con sempre copiando dal punto (0,0), mi ha fatto impazzire. Il cv2 con numpy sembra una soluzione molto migliore. – casper

+2

curioso perché è in y, x e non x, y coordinate? cv2.rectangle prende x, y ... intuitivamente prendere un roi è come prendere un rettangolo – user391339

4

Esempio: Se si dispone di pochi punti, e si desidera copiare regione contiene la sua

r = cv2.boundingRect(pts) 
cv2.imwrite('roi.png', im[r[0]:r[0]+r[2], r[1]:r[1]+r[3]]) 
+8

Penso che sia in realtà 'r [1]: r [1] + r [3], r [0]: r [0] + r [2] '. perché boundingRect restituisce' r = [x, y, w, h] 'e la sintassi di numpy si aspetta' [y: y + h, x: x + w] ' – TKrugg

Problemi correlati