Search code examples
pythonopencvnumpykinect

imwrite 16 bit png depth image


I have the following code. I am trying to save a 16 bit depth image which I retrieve from Kinect v1 as a png file. I wrote the following code sample:

def display_depth(dev, data, timestamp):
    global keep_runningp    
    cv2.imshow('Depth', frame_convert2.pretty_depth_cv(data))
    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

It works when I add the following code, which converts data from a 16 bit unsigned to an 8 bit unsigned NumPy array:

depth = depth.astype(np.uint8)

Without this line, I am just getting the whole blank/white png image. But I need to have a 16 bit png file.

How I can save it as a 16 bit png file?


Solution

  • Though type of my data was like this

    <type 'numpy.uint16'>

    Solution , to my problem was adding this line to my code

    depth.astype(np.uint16)