2016-06-02 13 views
1

ディスクまたはURLから画像を読み込むかどうかによって、cv2.imreadとcv2.imdecodeを使用します。これと比較すると、image.loadを使用して、libpngを使用するディスクからロードします。 cv2を使用すると、image.shapeは(height、width、channels)を出力します。しかし、トーチを使用する場合、形状は(チャネル、高さ、幅)です。cv2(python)とtorch/image(libpng)の画像の次元の相違点

私はこれがなぜ、どのように私は2つを同等にすることができますかについて興味があります。私の目標は、(チャネル、高さ、幅)次元を利用して、cv2でダウンロードした多くの画像をトーチテンソルに結合することです。私はcv2でダウンロードされたときに、数が少ない配列を作り直そうとしましたが、テンソルはトーチでダウンロードされたものと一致しません。

答えて

2

異なるライブラリは、異なるメモリフォーマットで画像データを格納することができます。これは、ライブラリとその目的(画像データの通過速度、メモリ効率など)に完全に依存します。

問題の解決策(他のサードパーティツールを使用しない場合)は、transposeを使用することができます。簡単な例:

import numpy as np 

x = np.random.random((3, 15, 17)) 
print(x.shape) 

# transpose axes with this order 
y = x.transpose((1,2,0)) 
print(y.shape) 

# for the sake of testing the euqality of the respective slides: 
print(np.linalg.norm(x[0,:,:] - y[:,:,0])) 

サンプル出力:

(3, 15, 17) 
(15, 17, 3) 
0.0 
+1

グレートを、私は転置行列を組み合わせて使用​​する必要がありました私のnp配列を等価にする操作。しかし、リードしてくれてありがとう。 –

0

チェックアウトlutorpy

Lutorpyは、双方向の橋で、Pythonでトーチとの深い学習のために建てlibrayですPython/NumpyとLua/Torchの間では、Pythonで任意のTorchモジュール(nn、rnnなど)を使用でき、トーチとnumpyの間の変数(配列とテンソル)を簡単に変換できます。

は、それが組み込まれているサポートトーチテンソルオブジェクトへのnumpyのアレイからの変換のために、彼らのgithubの上の「使用例」を参照してください。

## convert the numpy array into torch tensor 
xt = torch.fromNumpyArray(xn) 
関連する問題