2013-01-21 20 views
5

Sto cercando di ritagliare le immagini che escono dal flusso video con OpenCV per iOS. Non sto cercando di fare niente di particolare, semplicemente ritaglia l'immagine e mostrala. Ho provato this e this, nessuno dei due sembra funzionare per me. Come metodo delegato, ottengo l'attuale immagine cv :: Mat passata, quindi tutto ciò di cui ho bisogno è il codice che creerà l'effetto di ritaglio.Immagine mat di ritaglio in OpenCV 2.4.3 (iOS)

Potrei fare qualcosa di complicato come this se necessario, ma ho solo bisogno di un ritaglio rettangolare, quindi penso che ci sia un modo più semplice. Non capisco perché impostare il ROI non funzioni per me!

cv::Rect myROI(10, 10, 100, 100); 
cv::Mat croppedImage = src(myROI); 

src.copyTo(croppedImage); 


[displayView setImage:[UIImage imageWithCVMat:src]]; 

^^^ non funziona, solo la visualizzazione dell'immagine originale

+0

Ciao sto affrontando lo stesso problema. Potete per favore dare un'occhiata al mio post http://stackoverflow.com/questions/14756505/croping-an-image-in-ios-uisng-opencv-face-detect – 2vision2

risposta

21

Il problema nel codice è che copiando l'immagine src si copia l'intera immagine per l'immagine ritagliata. Ci sono due possibilità:

1 - Senza copiare i dati. È lo stesso di te. Ma senza il secondo passo. In tal caso croppedImage non è una vera e propria copia che ha sottolineato che i dati allocati in src .:

cv::Mat croppedImage = src(myRoi); 

2 - Con la copia dei dati.

cv::Mat croppedImage; 
cv::Mat(src, myRoi).copyTo(croppedImage) 
+1

Ho provato il tuo primo suggerimento prima, e quando ho visualizzato, è stato molto rovinato alla ricerca (tipo di sembrava statico tv). Il secondo metodo che hai menzionato ha funzionato per me, grazie! – Jameo

+2

@Jameo il tuo metodo di visualizzazione presumeva probabilmente che i dati fossero continui, il che non è vero usando il primo metodo. – Hammer

+0

Il secondo suggerimento ha funzionato per me mentre il primo ha fallito. – jarora