2012-11-02 18 views
12

La mia app utilizza cv :: findContours di opencv su un'immagine binaria. Ora ho bisogno di farlo in tempo reale. GPUImage ha un filtro cannyedge ma non ho trovato nulla relativo a findContours. GPUImage ha qualcosa che assomiglia molto a findContours? In caso contrario, qualcuno può suggerire un'alternativa? GrazieGPUImmagine equivalente di cv :: findContours

+5

Non c'è niente in quello che fa questo adesso. È un problema complicato lavorare sulle GPU. Recentemente ho letto il testo di Sean O'Connell su una tecnica per questo: ftp://ftp.heanet.ie/mirrors/sourceforge/g/gc/gccl/paper_draft.pdf ma anche lì non vede un'enorme accelerazione nel determinare gli oggetti connessi sulla GPU. Come misura a metà, potresti essere in grado di eseguire il rilevamento dei bordi prima sulla GPU, quindi leggere i risultati da questo per l'elaborazione associata alla CPU. Almeno avrai un po 'di velocità da questo. –

+0

Penso che andrò su quella strada. Qual è il modo migliore/efficace per convertire i buffer raw dopo aver eseguito un filtro in cv :: Mat? Ho provato a convertirlo in -> UIImage -> cv :: Mat ma ci vuole troppo tempo. – 0xSina

+2

Provate un GPUImageRawDataInput, dove dovreste essere in grado di alimentare i dati RGBA (o BGRA, dimentico l'ordine dei byte) non elaborati, senza dover passare per Core Graphics per un UIImage. –

risposta

0

C'è stato un problema segnalato a questo proposito nel 2015. https://github.com/BradLarson/GPUImage/issues/2094

La risposta di tale questione afferma che GPUImage non offre tale alternativa in questo momento. Pertanto, l'ipotesi migliore potrebbe essere quella di alimentare l'output di Canny o Sobel edge detection di GPUImage in un'operazione di determinazione del contorno esterna al framework GPUImage.