2017-05-08 19 views
2

イメージをRGB形式またはグレースケール形式(私はGimpを使って変換しました)は、グレースケールでイメージをロードするたびに、またはグレースケール形式に変換するたびに、常に[height、width]と表示されます第3次元(カラーチャンネルの数)。白黒画像を3次元の配列に変換するにはどうすればいいですか?

私は通常のB/Wの画像は、このような形式で保存されたが、私は特にのは言わせ、 [height, width, 1]画像形状、あなたがなるだろうものを必要していることを知っている

numpy.zeros(shape=[400, 400, 1]) 
+0

あなたのための掲示ソリューション作業のいずれかをしましたか? – Divakar

+1

はい、両方のソリューションがうまくいきました。私はそのうちの1つを肯定応答としてマークするのを忘れていました。 – danchy

答えて

2

あなたは常に「空追加することができますnp.expand_dimsを使用して「寸法:

>>> a2d = np.ones((100, 200)) 
>>> a3d = np.expand_dims(a, axis=2) 
>>> a3d.shape 
(100, 200, 1) 

又はNone又はnp.newaxisでスライスして:

>>> a2d[..., None].shape # instead of "..." (Ellipsis) you could also use `[:, :, None]` 
(100, 200, 1) 

私はnp.expand_dimsを好んでいます。なぜなら、スライスよりも何が起こっているのかが少しはっきりしているからです。あなたは条件付きでそれが必要な場合は、arr.ndim最初ため


を確認してください。

if arr.ndim == 2: 
    arr = np.expand_dims(arr, axis=2) 
2

内蔵np.atleast_3dまさにこの目的のためにあります -

np.atleast_3d(img) 

この組み込みはの世話をします2D配列の最後の1つの新しい軸を追加して出力形状を3Dに保ち、3D入力、すべてがフードの下で世話を受けています。

サンプル実行 -

In [42]: img = np.random.randint(0,255,(800,600)) # grayscale img 

In [43]: np.atleast_3d(img).shape 
Out[43]: (800, 600, 1) 

In [44]: img = np.random.randint(0,255,(800,600,3)) # RGB img 

In [45]: np.atleast_3d(img).shape 
Out[45]: (800, 600, 3) 
+0

私は 'np.array(img、ndmin = 3、copy = False)'だけを試みましたが、それは次元の前に追加されています。彼らは次元を追加するための別の機能を持っていることを知っておきたい。 :) – MSeifert

+0

「フードの下にあることを気にする」もう一つのことは間違っている。あなたは「それが世話をする...」という意味ですか? – MSeifert

+1

@MSeifert単語が足りない。もっと理にかなって編集されました。 – Divakar

関連する問題