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?
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. –
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
Ich habe meine benutzerdefinierte frame_convert implementiert und importierte diese. – MIRMIX