回答編集履歴

2

PILでGだけ抜き取る方法を追加

2021/02/23 00:21

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,115 @@
1
+ 以下追加投稿分 PILを使って3chから1chだけ抜き取る(グレースケール変換しない)
2
+
3
+ ---
4
+
5
+
6
+
7
+ ![イメージ説明](06e428724ce039e4b3ec40334f5e569b.png)<--サンプル画像
8
+
9
+
10
+
11
+ 要点は、
12
+
13
+ - PILのデータのままでは扱いにくいので`Numpy形式`に書き戻す
14
+
15
+ - Numpy形式のデータにおいてPILデータは`[h, w, ch]`の順番
16
+
17
+ - `ch`は`RGB`の順番なので、`インデックス番号1`で`G`のデータは抜き出せる
18
+
19
+
20
+
21
+ ```Python3
22
+
23
+ import numpy as np
24
+
25
+ from PIL import Image
26
+
27
+
28
+
29
+ path = "./sample.png"
30
+
31
+
32
+
33
+ # PILで開いたうえでデータをNumpy形式にする
34
+
35
+ # (例えばJPEGは圧縮されていてNumpyな配列になっていないので、
36
+
37
+ # そこからNumpyのデータ空間(?)に持ってくる必要がある)
38
+
39
+ img = np.asarray(Image.open(path))
40
+
41
+
42
+
43
+ # 元画像のshape (PILではchはRGB)
44
+
45
+ # print(img.shape)
46
+
47
+
48
+
49
+ # カラー画像の時Gだけ抜き取りたい
50
+
51
+ if len(img.shape) ==3:
52
+
53
+ h, w, ch = img.shape
54
+
55
+
56
+
57
+ # RGBのGだけ抜き取りたい
58
+
59
+ img_g = img[:,:,1]
60
+
61
+
62
+
63
+ # Numpy配列
64
+
65
+ print(img_g)
66
+
67
+ # [[ 28 28 255 255 0 0]
68
+
69
+ # [ 28 28 255 255 0 0]
70
+
71
+ # [ 0 0 127 127 255 255]
72
+
73
+ # [ 0 0 127 127 255 255]]
74
+
75
+
76
+
77
+
78
+
79
+ # ################################
80
+
81
+ # print("以下デバグ")
82
+
83
+ # list_ch = ["R", "G", "B"]
84
+
85
+ #
86
+
87
+ # #デバグ用 RGBを走査
88
+
89
+ # for i in range(ch):
90
+
91
+ # img_single_ch = img[:,:,i]
92
+
93
+ #
94
+
95
+ # print(list_ch[i],img_single_ch.shape)
96
+
97
+ # # OS標準のビューワーで開く
98
+
99
+ # Image.fromarray(img_single_ch.astype(np.uint8)).resize(size=(w*10,h*10),resample=Image.NEAREST).show()
100
+
101
+
102
+
103
+ ```
104
+
105
+
106
+
107
+ 以下初回投稿分 OpenCVを使って3ch-->1ch変換
108
+
109
+ ---
110
+
111
+
112
+
1
113
  画像関連であればPILかOpenCVかのどちらかが使いやすいと思います。
2
114
 
3
115
  OpenCVは色の変換が楽だと思いますのでOpenCVをお勧めします。

1

補足

2021/02/23 00:21

投稿

退会済みユーザー
test CHANGED
@@ -13,3 +13,7 @@
13
13
  ```
14
14
 
15
15
  これでカラー画像をグレースケールにできます。
16
+
17
+
18
+
19
+ グレースケールよりももっと値を圧縮したいのであれば、[`cv2.threshold()`](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html)を試してください。