2017-02-05 2 views
0

Ich habe eine sehr große Matrix, die eine Videodatei als ein Array von Frames ist, jeder etwa 350x250 Auflösung. Ich habe etwa 8.000-10.000 solcher Bilder in einer einzigen Videodatei, die etwa 1-1,5 GB groß ist. Ich habe festgestellt, dass HDF5 ein gutes Dateiformat für meine Verwendung ist, da ich viele mathematische Operationen an der Datei durchführen muss (über die gesamte Tiefe Spalte). Mein Problem ist, dass ich diese 3D-Matrix nicht in HDF5 speichern kann. Kann mir jemand vorschlagen, diese Frames inkrementell zu speichern (Frame für Frame zur hdf5-Datei hinzuzufügen) als 3D-Matrix im HDF5-Format? Ich benutze h5py Python-Paket.Wie wird eine sehr große 3-dimensionale Matrix im HDF5-Format gespeichert?

+1

Mit Ideen von http://docs.h5py.org/en/latest/high/dataset.html uns zeigen, wie man ein kleines Array speichern würde, sagen 10 Frames der (20,20) Größe. Tipp, initialisiere den Datensatz auf (10,20,20) und iteriere auf "data [i,:,:] = frame". Holen Sie sich das zuerst für kleine Daten. Sie können später an dem großen Problem arbeiten. – hpaulj

+0

Danke @hpaul. Das hat mein Problem gelöst. –

Antwort

1

Als Beispiel nehmen wir an, dass Ihr Video 10 Frames mit einer Auflösung von 200x200 Pixeln hat. Daher müssten Sie ein Dataset mit den Dimensionen 10 x 200 x 200 x 3 mit dem Datentyp uint8 erstellen (jede RGB-Komponente verwendet 8 vorzeichenlose Bits). Hier ist, wie dies auf die h5py API übertragen wird. Überprüfen Sie die docs für Details.

import h5py 
import numpy as np 

# create an hdf5 file 
with h5py.File("/tmp/videos.h5") as f: 
    # create a dataset for your movie 
    dst = f.create_dataset("myvideo", shape=(10, 200, 200, 3), 
          dtype=np.uint8) 
    # fill the 10 frames with a random image 
    for frame in range(10): 
     dst[frame] = np.random.randint(255, size=(200, 200, 3)) 
+1

Wenn Ihre Bilder Graustufen sind, ist die Form des Datasets natürlich 10 x 200 x 200. – weatherfrog

+0

Genau das habe ich gebraucht. Es hat perfekt funktioniert! Vielen Dank! –

Verwandte Themen