2015-01-12 13 views
5

Quindi conosco setSurface e non ho problemi ad usarlo come overlay o altro - è su un controllo visivo. Detto questo, sono sconcertato sull'ottenere i dati dei pixelC'è un modo per accedere ai pixel dell'immagine della fotocamera di tango pointcloud in Java

1) Ho provato tutto ciò che posso pensare (il controllo, la radice, ecc.) Per utilizzare le funzioni della cache di disegno per ottenere i bit per la superficie della telecamera. Yah, no. La bitmap memorizzata nella cache è sempre zerod out.

2) Ho utilizzato sia SurfaceView che GLSurfaceView come set di tag setSurface. Non posso usare nessun'altra classe, come TextureView.

3) Ho studiato l'API C e vedo la fotocamera espone connectOnFrameAvailable, che mi darà l'accesso al pixel

La mia ipotesi è che la logica del tango interna è solo utilizzando la superficie in java per guadagnare accesso al canale di trasferimento bit sottostante - nell'API C richiede un ID texture, il che mi fa sospettare alla fine della giornata, i dati della telecamera vengono spediti alla GPU abbastanza rapidamente, e scommetto che CUDA lib opera su di esso - dato lo stato delle cose, non riesco a vedere come ottenere i bit sul lato Java senza fare il root del dispositivo - solo perché ho una texture o una semplice vista di superficie che rende i bit grezzi sullo schermo non significa che posso arrivare a loro.

Non voglio rimuovere i dati di immagine dalla GPU. Avrei bisogno di passare la mia animazione occupata da un orologio a un calendario per quello.

Prima di immergermi nell'API C, esiste un modo per ottenere i bit della telecamera in Java? Voglio davvero essere in grado di associarli a una posa specifica, ma al momento non riesco nemmeno a capire come ottenerli del tutto. Voglio davvero conoscere la posizione e il colore di un punto 3D. Le intrinseche della fotocamera, la nuvola di punti e l'immagine 2D che ha generato la nuvola di punti sono tutto ciò di cui ho bisogno. Ma non posso fare nulla se non riesco a ottenere i pixel, e quanto più discutibile è la relazione tra un'immagine e una (posa e una pointcloud) lo scheletro diventerà qualsiasi sforzo.

Se mi immergo in C, connectOnFrameAvailable mi darà quello di cui ho bisogno? Quanto è sincronizzato con la generazione di nuvole di punti? Oh, e ho capito bene? La fotocamera a colori viene utilizzata per la profondità, il fisheye è usato per la posa?

Posso mescolare Java e C, cioè creare un'istanza di Tango in Java e quindi utilizzare solo C per il problema dell'immagine? O dovrò ri-realizzare tutto in C e smettere di usare il barattolo di tango java?

risposta

0
  • connectOnFrameAvailable mi darà quello di cui ho bisogno?

Sì, restituisce effettivamente il buffer di byte YUV.

  • Quanto è sincronizzato con la generazione di nuvole di punti?

L'API Tango non fornisce la sincronizzazione tra l'immagine a colori e la nuvola di punti di profondità, tuttavia fornisce il timestamp che consente la sincronizzazione a livello di applicazione.

  • La telecamera a colori viene utilizzata per la profondità, il fisheye è utilizzato per la posa?

Sì, hai ragione.

  • Posso mescolare Java e C (cioè creare un'istanza di Tango in Java e poi basta usare C per il rilascio di immagini) a partire da due esempio Tango non è davvero il modo Tango sostenuto, anche se funziona, lo farà essere estremamente hacky ..

Come temp walk-around, si potrebbe probabilmente provare a utilizzare la cache di disegno della vista?

+0

no - ho portato quel cucciolo nel terreno - non riesco a ottenere i bit in quel percorso a meno che non voglia fare il root del dispositivo. Tuttavia, ora sto usando le cose C++. TangoService_connectOnFrameAvailable sta sparando regolarmente. Sfortunatamente, sembra che quando si spara, gli aggiornamenti di immagine che si verificano a seguito della cessazione della trama della connessione. Ma almeno ho le mani sui pezzi! –