2016-08-03 7 views
0

各次元([x, y, 0]または[x, y, 1])のnumpy配列で表されるRGB(またはHSV) )は、特定のピクセルのカラーチャネル値を表します。私は配列を(M * N、3)に再配列して、色チャンネルがフラットリストに結合されている([R1, G1, B1], [R2, G2, B2] ...)(この場合は正しい用語ですか?)私は変形機能を使用しなければならないことを理解していますが、理解するのが難しいですどのようにこの機能を使用するには。どんな助けもありがとうございます。(M、N、3)numpy配列から(M * N、3)

編集:ここに私が何をしたいのかの例があります。

入力:画像を表す(640 x 640 x 3)配列[40, 40, 1]は特定のピクセルのG値になります。私は、3つのカラーチャンネルを全て取り出し、それらを以下の出力に結合したいと考えています。

出力:

## loading the image... 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
image = mpimg.imread("my_image.jpg") 

## extracting R, G, B and flatten them separately and then make 
## an array out of them. 
res = np.transpose(np.array([image[...,0].flatten(), image[...,1].flatten(), image[...,2].flatten()])) 

これが最もエレガントな方法ではないかもしれませんが、それは動作します:私が正しくあなたを理解している場合([R, G, B], [R, G, B], [R, G, B]...)

+1

あなたはいくつかの例の入力と出力を表示することができますか? –

+1

(M、N)ではなく(M、3)が必要ですか? – Dataman

+0

@ダーママンはい。 SVMに渡すことができるようにイメージ配列を平坦化したい。私はRGB値のフラットなリストをしたい – DeeWBee

答えて

3

imgがご使用のアレイの場合、img.reshape(-1, 3)を使用できます。例えば

In [50]: img.shape 
Out[50]: (5, 2, 3) 

In [51]: img 
Out[51]: 
array([[[2, 0, 4], 
     [1, 4, 3]], 

     [[2, 1, 4], 
     [3, 2, 2]], 

     [[2, 4, 1], 
     [4, 0, 2]], 

     [[1, 4, 2], 
     [3, 2, 2]], 

     [[3, 2, 1], 
     [2, 1, 0]]]) 


In [53]: x = img.reshape(-1, 3) 

In [54]: x.shape 
Out[54]: (10, 3) 

In [55]: x 
Out[55]: 
array([[2, 0, 4], 
     [1, 4, 3], 
     [2, 1, 4], 
     [3, 2, 2], 
     [2, 4, 1], 
     [4, 0, 2], 
     [1, 4, 2], 
     [3, 2, 2], 
     [3, 2, 1], 
     [2, 1, 0]]) 
+0

はい、混乱して申し訳ありません。私はMの代わりにM * Nを意味しました。これは完璧です – DeeWBee

1

、そして、私はこのような何かをするだろう。実際には、これは(M, 3)を与えませんが、(MxN, 3)を与えます。 (M, 3)を使用すると、一部のデータが失われているので、これは実際には必要です。

関連する問題