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

回答編集履歴

2

f

2019/10/28 09:13

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -86,8 +86,8 @@
86
86
 
87
87
  ![イメージ説明](56e24d5a029bdb08f99d618da98428d5.png)
88
88
 
89
+ ![イメージ説明](cf3784eae31609f8829f88a9251837ee.png)
89
90
 
90
-
91
91
  ![イメージ説明](40c724809cb826665aa79b5a1cdd7920.png)
92
92
 
93
93
  切り出し後

1

f

2019/10/28 09:13

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -9,11 +9,15 @@
9
9
  ![イメージ説明](dffef1a901bb66e2c079a04720093635.png)
10
10
 
11
11
  この今40となっている閾値は処理したい画像によって調整する必要があります。
12
- 150に変更したところ、綺麗に2値化るこした
12
+ 大津の手法を使うとこのパラメータを自動で決められま。(必ずうまくいくは限りません。うまくいかない場合は手動この値は決める必要があり)
13
13
 
14
+ ```python
15
+ ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
16
+ print(ret) # 161
17
+ ```
18
+
14
19
  ![イメージ説明](72c8690781ca23ba3ab0303a78f66233.png)
15
20
 
16
- 2値化は背景とそれ以外の物体を白黒で分ける処理なので、背景が異なる場合はそれに応じて変える必要があります。
17
21
 
18
22
  ## サンプルコード
19
23
 
@@ -29,8 +33,7 @@
29
33
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
30
34
 
31
35
  # 2値化する。
32
- # ★ 2値化の閾値は要調整
33
- ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
36
+ ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
34
37
 
35
38
  # 膨張処理
36
39
  kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))