2017-12-05 5 views
3

Ich versuche Tiefenbilder von der TrueTepth-Kamera iPhoneX zu speichern. Mit dem Beispielcode AVCamPhotoFilter kann ich die auf das Graustufenformat umgestellte Tiefe auf dem Bildschirm des Telefons in Echtzeit anzeigen. Ich kann nicht herausfinden, wie die Sequenz von Tiefenbildern im Rohformat (16 Bit oder mehr) gespeichert wird.Speichern Sie Tiefenbilder von TrueDepth-Kamera

Ich habe depthData, die eine Instanz von AVDepthData ist. Eines seiner Mitglieder ist depthDataMap, das eine Instanz von CVPixelBuffer und Bildformat kCVPixelFormatType_DisparityFloat16 ist. Gibt es eine Möglichkeit, es auf dem Telefon zu speichern, um es für die Offline-Manipulation zu übertragen?

+0

Haben Sie eine Folge von „noch“ Tiefenbilder speichern möchten oder Video schreiben? Beachten Sie, dass das Beispielcode-Projekt, das Sie zitieren, bereits Tools zum Konvertieren von Tiefenpuffern in Graustufenstrukturen enthält, so dass Sie sich bestehende Fragen zu [CVPixelBuffer's aus Metalltexturen] (https://stackoverflow.com/q/44842661/957768) oder [Video von einem Metal-Renderer mit AVAssetWriter aufnehmen] (https://stackoverflow.com/q/43838089/957768). – rickster

+0

@rickster, ich möchte eine Sequenz von Standbilder speichern. Ich möchte Tiefenbilder nicht in Graustufen-Texturen konvertieren, sondern die Roh-Tiefenwerte (in Metern) speichern. – dustymax

Antwort

2

Es gibt kein Standard-Videoformat für die „rohe“ Tiefe/Disparitätskarten, die etwas mit AVCapture zu tun haben, ist vielleicht nicht wirklich eine Möglichkeit bieten, es aufzunehmen.

Sie haben ein paar Optionen hier eine Untersuchung wert:

  1. Convert Tiefenkarten Texturen in Graustufen (die Sie den Code in dem AVCamPhotoFilter Beispielcode verwenden tun), dann die Texturen AVAssetWriter passieren zu produzieren ein Graustufenvideo. Je nachdem, welches Videoformat und welche Graustufen-Konvertierungsmethode Sie wählen, kann andere Software, die Sie zum Lesen des Videos schreiben, in der Lage sein, Tiefen-/Disparitätsinformationen mit ausreichender Genauigkeit für Ihre Zwecke aus den Graustufenbildern wiederherzustellen.

  2. Immer wenn Sie eine CVPixelBuffer haben, können Sie die Daten selbst bekommen und tun, was immer Sie wollen. Verwenden Sie CVPixelBufferLockBaseAddress (mit dem readOnly Flag), um sicherzustellen, dass der Inhalt nicht verändert wird, während Sie es lesen, dann kopieren Sie Daten aus dem Zeiger CVPixelBufferGetBaseAddress bietet, wo immer Sie möchten. (Verwenden Sie andere Pixelpufferfunktionen, um zu sehen, wie viele Bytes kopiert werden sollen, und entsperren Sie den Puffer, wenn Sie fertig sind.)

    Vorsicht, wenn Sie zu viel Zeit damit verbringen, aus Puffern zu kopieren oder sie auf andere Weise zu behalten wird nicht freigegeben, wenn neue Puffer vom Erfassungssystem kommen und Ihre Aufnahmesitzung hängt. (Alles in allem, ist es unklar, ohne vorher zu testen, ob ein Gerät den Speicher & I/O-Bandbreite für viel Aufzeichnung auf diese Weise.)