teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

たいぽ

2017/05/27 07:05

投稿

komachi
komachi

スコア94

answer CHANGED
@@ -69,11 +69,11 @@
69
69
  1行目・・・左上ピクセルのR要素
70
70
  2行目・・・左上ピクセルのG要素
71
71
  3行目・・・左上ピクセルのB要素
72
- 4行目・・・左上ピクセルのR要素
72
+ 4行目・・・左上ピクセルのA要素
73
73
  5行目・・・右上ピクセルのR要素
74
74
  6行目・・・右上ピクセルのG要素
75
75
  7行目・・・右上ピクセルのB要素
76
- 8行目・・・右上ピクセルのR要素
76
+ 8行目・・・右上ピクセルのA要素
77
77
 
78
78
 
79
79
 

2

誤字

2017/05/27 07:05

投稿

komachi
komachi

スコア94

answer CHANGED
@@ -1,24 +1,19 @@
1
- 画像をそのように読み込むと3次元配列になります。(RGBの3チャネルあるため 3次元配列はそのままでは書き出せません。
1
+ 画像をそのように読み込むと3次元配列になります(高さ、横幅、RGBAチャネル)。 3次元配列はそのままでは書き出せません。1次元配列か、2次元配列なら書き出せます。
2
2
 
3
- 1次元配列なら書き出せま。以下は動きます。
3
+ グレースケール化した画像はRGBAチャネルがなく2次元配列で表されるので書き出すことができます。
4
-
5
4
  ```python
6
5
  from PIL import Image
7
6
  import numpy as np
8
7
 
9
- img=Image.open("in.png").convert('L') # convert('L')はグレースケール化(1次元)を表していま
8
+ img=Image.open("in.png").convert('L') # convert('L')はグレースケールです。チャネルがないので縦、横の2次元
10
9
 
11
10
  img_array=np.asarray(img)
12
11
 
13
12
  np.savetxt('out', img_array)
14
13
  ```
15
14
 
16
- なので赤、緑、青ごとに書き出すか、3次元を1次元に変換して書き出す必要があります。
15
+ また、3次元配列を1次元配列に変換して書き出すこともできます。
17
16
 
18
- こんな感じ
19
-
20
-
21
-
22
17
  ```python
23
18
  from PIL import Image
24
19
  import numpy as np
@@ -26,7 +21,61 @@
26
21
  img=Image.open("in.png")
27
22
 
28
23
  img_array=np.asarray(img)
29
- img_array = img_array.flatten() # 3d => 1d
24
+ img_array = img_array.flatten() # 3次元1次元に変換しています。
30
25
 
31
26
  np.savetxt('out', img_array)
32
- ```
27
+ ```
28
+
29
+ 【例】
30
+ 以下のような 2x2 ピクセルで試してみます。
31
+ ![イメージ説明](078820fa6a50b8413e2b535a25ceee7e.png)
32
+
33
+
34
+ ## 前者(グレースケール):
35
+
36
+
37
+ ```
38
+ 1.890000000000000000e+02 1.570000000000000000e+02
39
+ 2.230000000000000000e+02 2.150000000000000000e+02
40
+ ```
41
+
42
+ グレースケールなので各数値はピクセルの明るさを意味しています。
43
+ e+02は10の2乗を意味してるので、左上の数値は189(=1.89*100)と同じです。同様に右上は157、左下は223、右下は215です。
44
+
45
+
46
+ ## 後者(flatten):
47
+
48
+ ```
49
+ 1.290000000000000000e+02
50
+ 2.120000000000000000e+02
51
+ 2.330000000000000000e+02
52
+ 2.550000000000000000e+02
53
+ 1.430000000000000000e+02
54
+ 1.740000000000000000e+02
55
+ 1.080000000000000000e+02
56
+ 2.550000000000000000e+02
57
+ 2.110000000000000000e+02
58
+ 2.270000000000000000e+02
59
+ 2.360000000000000000e+02
60
+ 2.550000000000000000e+02
61
+ 2.330000000000000000e+02
62
+ 2.140000000000000000e+02
63
+ 1.740000000000000000e+02
64
+ 2.550000000000000000e+02
65
+ ```
66
+
67
+
68
+ 4行ごとに1つのピクセルを表してます。
69
+ 1行目・・・左上ピクセルのR要素
70
+ 2行目・・・左上ピクセルのG要素
71
+ 3行目・・・左上ピクセルのB要素
72
+ 4行目・・・左上ピクセルのR要素
73
+ 5行目・・・右上ピクセルのR要素
74
+ 6行目・・・右上ピクセルのG要素
75
+ 7行目・・・右上ピクセルのB要素
76
+ 8行目・・・右上ピクセルのR要素
77
+
78
+
79
+
80
+
81
+ です。

1

たいぽ

2017/05/27 07:04

投稿

komachi
komachi

スコア94

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  from PIL import Image
7
7
  import numpy as np
8
8
 
9
- img=Image.open("in.png").convert('L') # convert('L')はグレースケール化を表しています
9
+ img=Image.open("in.png").convert('L') # convert('L')はグレースケール化(1次元)を表しています
10
10
 
11
11
  img_array=np.asarray(img)
12
12
 
@@ -23,7 +23,7 @@
23
23
  from PIL import Image
24
24
  import numpy as np
25
25
 
26
- img=Image.open("in.png").convert('L')
26
+ img=Image.open("in.png")
27
27
 
28
28
  img_array=np.asarray(img)
29
29
  img_array = img_array.flatten() # 3d => 1d