回答編集履歴

3

たいぽ

2017/05/27 07:05

投稿

komachi
komachi

スコア94

test CHANGED
@@ -140,7 +140,7 @@
140
140
 
141
141
  3行目・・・左上ピクセルのB要素
142
142
 
143
- 4行目・・・左上ピクセルのR要素
143
+ 4行目・・・左上ピクセルのA要素
144
144
 
145
145
  5行目・・・右上ピクセルのR要素
146
146
 
@@ -148,7 +148,7 @@
148
148
 
149
149
  7行目・・・右上ピクセルのB要素
150
150
 
151
- 8行目・・・右上ピクセルのR要素
151
+ 8行目・・・右上ピクセルのA要素
152
152
 
153
153
 
154
154
 

2

誤字

2017/05/27 07:05

投稿

komachi
komachi

スコア94

test CHANGED
@@ -1,10 +1,8 @@
1
- 画像をそのように読み込むと3次元配列になります。(RGBの3チャネルあるため 3次元配列はそのままでは書き出せません。
1
+ 画像をそのように読み込むと3次元配列になります(高さ、横幅、RGBAチャネル)。 3次元配列はそのままでは書き出せません。1次元配列か、2次元配列なら書き出せます。
2
2
 
3
3
 
4
4
 
5
- 1次元配列なら書き出せま。以下は動きます。
5
+ グレースケール化した画像はRGBAチャネルがなく2次元配列で表されるので書き出すことができます。
6
-
7
-
8
6
 
9
7
  ```python
10
8
 
@@ -14,7 +12,7 @@
14
12
 
15
13
 
16
14
 
17
- img=Image.open("in.png").convert('L') # convert('L')はグレースケール化(1次元)を表していま
15
+ img=Image.open("in.png").convert('L') # convert('L')はグレースケールです。チャネルがないので縦、横の2次元
18
16
 
19
17
 
20
18
 
@@ -28,15 +26,7 @@
28
26
 
29
27
 
30
28
 
31
- なので赤、緑、青ごとに書き出すか、3次元を1次元に変換して書き出す必要があります。
29
+ また、3次元配列を1次元配列に変換して書き出すこともできます。
32
-
33
-
34
-
35
- こんな感じ
36
-
37
-
38
-
39
-
40
30
 
41
31
 
42
32
 
@@ -54,10 +44,118 @@
54
44
 
55
45
  img_array=np.asarray(img)
56
46
 
57
- img_array = img_array.flatten() # 3d => 1d
47
+ img_array = img_array.flatten() # 3次元1次元に変換しています。
58
48
 
59
49
 
60
50
 
61
51
  np.savetxt('out', img_array)
62
52
 
63
53
  ```
54
+
55
+
56
+
57
+ 【例】
58
+
59
+ 以下のような 2x2 ピクセルで試してみます。
60
+
61
+ ![イメージ説明](078820fa6a50b8413e2b535a25ceee7e.png)
62
+
63
+
64
+
65
+
66
+
67
+ ## 前者(グレースケール):
68
+
69
+
70
+
71
+
72
+
73
+ ```
74
+
75
+ 1.890000000000000000e+02 1.570000000000000000e+02
76
+
77
+ 2.230000000000000000e+02 2.150000000000000000e+02
78
+
79
+ ```
80
+
81
+
82
+
83
+ グレースケールなので各数値はピクセルの明るさを意味しています。
84
+
85
+ e+02は10の2乗を意味してるので、左上の数値は189(=1.89*100)と同じです。同様に右上は157、左下は223、右下は215です。
86
+
87
+
88
+
89
+
90
+
91
+ ## 後者(flatten):
92
+
93
+
94
+
95
+ ```
96
+
97
+ 1.290000000000000000e+02
98
+
99
+ 2.120000000000000000e+02
100
+
101
+ 2.330000000000000000e+02
102
+
103
+ 2.550000000000000000e+02
104
+
105
+ 1.430000000000000000e+02
106
+
107
+ 1.740000000000000000e+02
108
+
109
+ 1.080000000000000000e+02
110
+
111
+ 2.550000000000000000e+02
112
+
113
+ 2.110000000000000000e+02
114
+
115
+ 2.270000000000000000e+02
116
+
117
+ 2.360000000000000000e+02
118
+
119
+ 2.550000000000000000e+02
120
+
121
+ 2.330000000000000000e+02
122
+
123
+ 2.140000000000000000e+02
124
+
125
+ 1.740000000000000000e+02
126
+
127
+ 2.550000000000000000e+02
128
+
129
+ ```
130
+
131
+
132
+
133
+
134
+
135
+ 4行ごとに1つのピクセルを表してます。
136
+
137
+ 1行目・・・左上ピクセルのR要素
138
+
139
+ 2行目・・・左上ピクセルのG要素
140
+
141
+ 3行目・・・左上ピクセルのB要素
142
+
143
+ 4行目・・・左上ピクセルのR要素
144
+
145
+ 5行目・・・右上ピクセルのR要素
146
+
147
+ 6行目・・・右上ピクセルのG要素
148
+
149
+ 7行目・・・右上ピクセルのB要素
150
+
151
+ 8行目・・・右上ピクセルのR要素
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+ です。

1

たいぽ

2017/05/27 07:04

投稿

komachi
komachi

スコア94

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- img=Image.open("in.png").convert('L') # convert('L')はグレースケール化を表しています
17
+ img=Image.open("in.png").convert('L') # convert('L')はグレースケール化(1次元)を表しています
18
18
 
19
19
 
20
20
 
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- img=Image.open("in.png").convert('L')
51
+ img=Image.open("in.png")
52
52
 
53
53
 
54
54