2017-07-10 2 views
0

Ich schreibe eine App, um jeden Frame von einem Video zu erfassen, so dass ich einige CV-Verarbeitung machen kann. Laut der Beschreibung des Android APIs sollte ich die Oberfläche des Mediaplayers als ImageReader.getSurface() einstellen. so dass ich jeden Video-Frame auf dem Callback OnImageAvailableListener bekommen kann. Und es funktioniert wirklich auf einigen Geräten und einigen Videos. Allerdings, auf meinem Nexus5 (API24-25) .Ich habe fast grüne Pixel wenn ImageAvailable. Ich habe das Byte [] in den Yuv-Ebenen des Bildes überprüft, und ich stelle fest, dass die Bytes, die ich aus dem Video gelesen habe, falsch sind! Die meisten Bytes sind Y = 0, UV = 0, was zu einem merkwürdigen Bild führt von grünem Pixel. Ich habe sichergestellt, dass das Video YUV420sp.Could jemand mir helfen kann? Oder empfehlen Sie eine andere Möglichkeit für mich Frame zu greifen? (Ich habe versucht javacv aber der Grabber ist zu langsam)Hat ImageReader beim Lesen von einem Video falsche Daten erhalten?

Antwort

0

Ich repariere meine Frage !! Wenn wir Image verwenden, sollten wir getCropRect verwenden, um den gültigen Bereich des Image zu erhalten. Beispiel, ich bekomme image.width == 1088, wenn ich einen 1920 * 1080 Rahmen decodiere, sollte ich image.getCropImage() verwenden, um die richtige Größe des Bildes zu erhalten, das 1920,1080

sein wird
Verwandte Themen