回答編集履歴

1

d

2019/10/16 05:52

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -77,3 +77,111 @@
77
77
 
78
78
 
79
79
  上記画像にセマンティックセグメンテーションを行った結果
80
+
81
+
82
+
83
+ ## 追記
84
+
85
+
86
+
87
+ 自分はいつも画像処理のパラメータを決めるときは Jupyter Notebook で使える ipywidgets という拡張機能を使って調整しています。
88
+
89
+ 回答のパラメータ値もそれで決めました。
90
+
91
+
92
+
93
+ ```bash
94
+
95
+ pip install ipywidgets
96
+
97
+ jupyter nbextension enable --py --sys-prefix widgetsnbextension
98
+
99
+ ```
100
+
101
+
102
+
103
+ ```python
104
+
105
+ import cv2
106
+
107
+ from IPython.display import Image, display
108
+
109
+ from ipywidgets import widgets
110
+
111
+
112
+
113
+
114
+
115
+ def imshow(img):
116
+
117
+ """画像を Notebook 上に表示する。
118
+
119
+ """
120
+
121
+ ret, encoded = cv2.imencode(".png", img)
122
+
123
+ display(Image(encoded))
124
+
125
+
126
+
127
+
128
+
129
+ def inRange(**kwargs):
130
+
131
+ """2値化処理を行い、結果を表示する。
132
+
133
+ """
134
+
135
+ lower = tuple([int(l) for l, h in kwargs.values()])
136
+
137
+ upper = tuple([int(h) for l, h in kwargs.values()])
138
+
139
+ binary = cv2.inRange(img, lowerb=lower, upperb=upper)
140
+
141
+ imshow(binary)
142
+
143
+
144
+
145
+
146
+
147
+ # 画像を読み込む。
148
+
149
+ img = cv2.imread("test.jpg")
150
+
151
+
152
+
153
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
154
+
155
+
156
+
157
+ # パラメータ lower, upper を設定するスライダー
158
+
159
+ num_channels = 1 if img.ndim == 2 else img.shape[2]
160
+
161
+ parts = {}
162
+
163
+ for i in range(num_channels):
164
+
165
+ slider = widgets.SelectionRangeSlider(
166
+
167
+ options=np.arange(256), index=(0, 255), description=f"channel {i}"
168
+
169
+ )
170
+
171
+ slider.layout.width = "400px"
172
+
173
+
174
+
175
+ parts[f"channel{i}"] = slider
176
+
177
+
178
+
179
+ # ウィジェットを表示する。
180
+
181
+ widgets.interactive(inRange, **parts)
182
+
183
+ ```
184
+
185
+
186
+
187
+ ![イメージ説明](fab0ba0e89169e55ce70508be070dd45.png)