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

回答編集履歴

1

d

2019/10/16 05:52

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -37,4 +37,58 @@
37
37
 
38
38
  ![イメージ説明](3554b490013aa8cb2b86af33653b382c.png)
39
39
 
40
- 上記画像にセマンティックセグメンテーションを行った結果
40
+ 上記画像にセマンティックセグメンテーションを行った結果
41
+
42
+ ## 追記
43
+
44
+ 自分はいつも画像処理のパラメータを決めるときは Jupyter Notebook で使える ipywidgets という拡張機能を使って調整しています。
45
+ 回答のパラメータ値もそれで決めました。
46
+
47
+ ```bash
48
+ pip install ipywidgets
49
+ jupyter nbextension enable --py --sys-prefix widgetsnbextension
50
+ ```
51
+
52
+ ```python
53
+ import cv2
54
+ from IPython.display import Image, display
55
+ from ipywidgets import widgets
56
+
57
+
58
+ def imshow(img):
59
+ """画像を Notebook 上に表示する。
60
+ """
61
+ ret, encoded = cv2.imencode(".png", img)
62
+ display(Image(encoded))
63
+
64
+
65
+ def inRange(**kwargs):
66
+ """2値化処理を行い、結果を表示する。
67
+ """
68
+ lower = tuple([int(l) for l, h in kwargs.values()])
69
+ upper = tuple([int(h) for l, h in kwargs.values()])
70
+ binary = cv2.inRange(img, lowerb=lower, upperb=upper)
71
+ imshow(binary)
72
+
73
+
74
+ # 画像を読み込む。
75
+ img = cv2.imread("test.jpg")
76
+
77
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
78
+
79
+ # パラメータ lower, upper を設定するスライダー
80
+ num_channels = 1 if img.ndim == 2 else img.shape[2]
81
+ parts = {}
82
+ for i in range(num_channels):
83
+ slider = widgets.SelectionRangeSlider(
84
+ options=np.arange(256), index=(0, 255), description=f"channel {i}"
85
+ )
86
+ slider.layout.width = "400px"
87
+
88
+ parts[f"channel{i}"] = slider
89
+
90
+ # ウィジェットを表示する。
91
+ widgets.interactive(inRange, **parts)
92
+ ```
93
+
94
+ ![イメージ説明](fab0ba0e89169e55ce70508be070dd45.png)