2017-11-03 13 views
-4

私は、次のコードスニペットに出くわした:私は最初の行に理解することができましたこのPythonコードをどのように解釈できますか?

output = numpy.zeros((max(img1.shape[0], img2.shape[0]), img1.shape[1] + img2.shape[1], img1.shape[2]), dtype=img1.dtype) 
output[:img1.shape[0], :img1.shape[1],:] = img1 
output[:img2.shape[0]:,img1.shape[1]:img1.shape[1]+img2.shape[1],:] = img2 

output = numpy.zeros((max(img1.shape[0], img2.shape[0]), img1.shape[1] + img2.shape[1], img1.shape[2]), dtype=img1.dtype) 

をしかし、次の2行が何を意味するかを解釈できませんでした:

output[:img1.shape[0], :img1.shape[1],:] = img1 
output[:img2.shape[0]:,img1.shape[1]:img1.shape[1]+img2.shape[1],:] = img2 

アイデア

ご協力いただきありがとうございます。

+0

これらは、配列が小さいインデックスです。 'a [:b、:c、:]'は、最初のインデックスが0からbまで、2番目が0からcまで、3番目が寸法。 –

+0

お返事ありがとうございます。この声明はどうですか? :img2.shape [0] :(最後に ":"が表示されます)。 – Simplicity

+0

コロンの後には何の効果もないと思います。範囲のステップを紹介します。デフォルトは1です。 –

答えて

1

私が理解するように、img1とimg2は2つの画像のすべてのピクセルを含む行列です。

とします

img1 = x x x 
     x x x 
     x x x 

img2 = o o 
     o o 
     o o 
     o o 

出力は、その高さ、幅、両方の幅の合計であるIMG1とIMG2との間で最高である行列です。深さが関係しているかどうかはわかりませんが、最初の画像の深さ(z軸)を使用しています。

output = 0 0 0 0 0 
     0 0 0 0 0 
     0 0 0 0 0 
     0 0 0 0 0 

最初のステップは、出力にimg1を保存することです。これは、y軸上で0からimg1.height、y軸上で0からimg1.widthまでのインデックスを占有して行われます。

output[:img1.shape[0], :img1.shape[1],:] = img1 

output = x x x 0 0 
     x x x 0 0 
     x x x 0 0 
     0 0 0 0 0 

次に、IMG2は、x軸上の+ img2.widthをimg1.widthするy軸上とimg1.widthから0からimg2.heightに保存されています。その後

output[:img2.shape[0]:,img1.shape[1]:img1.shape[1]+img2.shape[1],:] = img2 

output = x x x o o 
     x x x o o 
     x x x o o 
     0 0 0 o o 

私は、これは同様に、両方の画像がこの軸上の情報を持っている場合は、z軸に行われるだろうと仮定します。

+0

非常に良い答えです!ちょっとしたメモ。私が "numpy"を使用しているので、最初の次元は高さで、2番目の次元は幅です。あなたの答えでは、幅を高さで、高さを幅で置き換えるだけです。ありがとう。 – Simplicity

+0

Ok、修正済み! :-D –

0

2枚の画像を並べて積み重ねています。 thrid次元なし例:

img1 = np.array([[1, 1], [1, 1]]) 
img2 = np.array([[2, 2, 2], [2, 2, 2], [2, 2, 2]]) 
output = np.zeros((max(img1.shape[0], img2.shape[0]), img1.shape[1] + img2.shape[1]), dtype=img1.dtype) 
output[:img1.shape[0], :img1.shape[1]] = img1 
output[:img2.shape[0]:, img1.shape[1]:img1.shape[1] + img2.shape[1]] = img2 
print(output) 

出力:

[[1 1 2 2 2] 
[1 1 2 2 2] 
[0 0 2 2 2]] 

あなたは私はあなたがnp.hstacknp.vstackを使用するようお勧めnumpyを使用しているので。

関連する問題