2017-06-17 61 views
1

私は次のコードを持っています。私はKinect v1からpngファイルとして取得する16ビット深度の画像を保存しようとしています。私は次のコードサンプルを書いた:imwrite 16ビットPNG深度イメージ

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 

私は8ビット符号なしnumpyの配列に16ビット符号なしのデータを変換し、次のコード、追加したときにそれが動作:この行がないと

depth = depth.astype(np.uint8) 

を、私はちょうど空白/白のPNG画像全体を取得しています。しかし、私は16ビットのPNGファイルを持っている必要があります。

どうすれば16ビットのpngファイルとして保存できますか?私が作成した場合、私のデータの

+1

に次の行を追加しましたa = np.random.randint(0、65536、size =(48、48、3)).stype(np.uint16) 'そして' cv2.imwrite( 'foo.png'、a) 'を実行すると、 16ビットのRGBファイル。代わりに 'a = np.random.randint(0、65535、size =(48、48)).stat(np.uint16)'を使うと、16ビットのグレースケール画像が得られます。言い換えれば、 'cv2.imwrite()'は私のために働きます。私はあなたを助けるために[最小、完全で検証可能な例](https://stackoverflow.com/help/mcve)が必要だと思います。 –

+1

'frame_convert2.pretty_depth(data)'を保存しています。つまり、16ビットイメージではなく8ビットイメージを保存しています。 [関数の実装](https://github.com/OpenKinect/libfreenect/blob/master/wrappers/python/frame_convert2.py)を見れば、実際には 'depth = depth.astype(np.uint8) ' – api55

+0

私は自分のカスタムframe_convertを実装し、それをインポートしていました。 – MIRMIX

答えて

0

けれども型がこの

<type 'numpy.uint16'>

のように私の問題を解決するには、 `、たとえば、私のコード

depth.astype(np.uint16) 
関連する問題