2017-06-17 8 views
1

Ich habe den folgenden Code. Ich versuche ein 16-Bit-Tiefenbild zu speichern, das ich aus Kinect v1 als PNG-Datei erhalte. Ich schrieb das folgende Codebeispiel:Ich schreibe 16 Bit Png Tiefe Bild

def display_depth(dev, data, timestamp): 
    global keep_runningp  
    #cv2.imshow('Depth', frame_convert2.pretty_depth_cv(data)) 
    cv2.imshow('Depth', frame_convert2.pretty_depth_cv(data)) 
    print type(data) 
    print data.shape 
    depthf.write(repr(timestamp)+" Depth/"+repr(timestamp)+".png\n") 
    namef="Sample_dataset/Depth/"+repr(timestamp)+".png"  
    cv2.imwrite(namef,frame_convert2.pretty_depth(data))  
    if cv2.waitKey(10) == 27:   
     keep_running = False 

Es funktioniert, wenn I den folgenden Code hinzuzufügen, die Daten von einem 16 Bit ohne Vorzeichen zu einem 8-Bit unsigned NumPy Array konvertiert:

depth = depth.astype(np.uint8) 

Ohne diese Linie, Ich bekomme gerade das ganze leere/weiße PNG-Bild. Aber ich brauche eine 16-Bit-PNG-Datei.

Wie kann ich es als 16-Bit-Png-Datei speichern?

+1

Wenn ich schaffen, sagen wir, ' a = np.random.randint (0, 65536, size = (48, 48, 3)). astype (np.uint16) 'und dann' cv2.imwrite ('foo.png', a) ', bekomme ich eine 16-Bit-RGB-Datei. Wenn ich stattdessen 'a = np.random.randint (0, 65535, size = (48, 48)). Astype (np.uint16) 'verwende, erhalte ich ein 16-Bit-Graustufenbild. Mit anderen Worten, 'cv2.imwrite()' funktioniert für mich. Ich denke, wir brauchen ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve), um Ihnen zu helfen. –

+1

Sie speichern 'frame_convert2.pretty_depth (Daten)' Dies bedeutet, dass Sie kein 16-Bit-Bild, sondern ein 8-Bit-Bild speichern. Wenn Sie sich die [function implementation] (https://github.com/OpenKinect/libfreenect/blob/master/wrappers/python/frame_convert2.py) anschauen, wird tatsächlich 'depth = depth.astype (np.uint8) ' – api55

+0

Ich habe meine benutzerdefinierte frame_convert implementiert und importierte diese. – MIRMIX

Antwort

0

Obwohl Typ meiner Daten war wie dieser

<type 'numpy.uint16'>

Lösung, um mein Problem, diese Linie zu meinem Code wurde hinzugefügt

depth.astype(np.uint16) 
Verwandte Themen