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

回答編集履歴

1

修正

2021/07/23 22:44

投稿

beatbox4108
beatbox4108

スコア49

answer CHANGED
@@ -1,78 +1,17 @@
1
1
  ループで上書きが起こっています
2
- ```diff
2
+ ```python
3
- import os
4
- import cv2
5
- import shutil
6
- import glob
3
+ a = lb + aaa
7
- import numpy as np
4
+ b = lg + bbb #bに代入
8
- from time import sleep
9
- from PIL import Image
5
+ c = lr + ccc #cに代入
6
+ ```
10
7
 
11
- cwd = os.getcwd()
12
-
13
- #file name
14
- img_dir = "E:/b/"
15
- out = "output"
16
-
17
- #Lower param
8
+ ここで定義をしていますが、
18
- lb = 34
19
- lg = 3
20
- lr = 53
21
-
22
- #Upper param
23
- ub = 114
24
- ug = 75
25
- ur = 150
26
-
27
- #Threshold
9
+ ```python
28
- lower = 200
29
- upper = 1500
30
-
31
- def test():
32
- path = glob.glob(img_dir + "/*png")
33
- outPath = img_dir + "/" + out
34
- os.makedirs(outPath, exist_ok=True)
35
- for aaa in range (55):
36
- for bbb in range(36):
37
- for ccc in range(48):
38
- for i in path:
39
- a = lb + aaa
40
- b = lg + bbb #bに代入
41
- c = lr + ccc #cに代入
42
- name = os.path.basename(i)
43
- image = cv2.imread(i) # ファイル読み込み
44
- bgrLower = np.array([a, b, c]) # 抽出する色の下限
45
- bgrUpper = np.array([ub, ug, ur]) # 抽出する色の上限
46
- bgrResult = bgrExtraction(image, bgrLower, bgrUpper)
47
- w,h,c = bgrResult.shape #cを上書きしている
10
+ w,h,c = bgrResult.shape #cを上書きしている
48
-
11
+ ```
12
+ や、
49
- count = 0
13
+ ```python
50
- #全画素を探索してクロ以外の画素をカウント upper以上になったらストップ
51
- for i in range(w):
52
- for j in range(h):
53
- imgdata = bgrResult[i,j]
54
- b,g,r = imgdata #bを上書きしている
14
+ b,g,r = imgdata #bを上書きしている
55
- if b != 0 and g != 0 and r !=0:
56
- count += 1
57
- elif count == upper:
58
- break
59
- else:
60
- continue
61
- break
62
-
63
- #lower以上 uppr以下 であれば画像を保存
64
- if count < lower and count > upper:
65
- continue
66
- cv2.imwrite(os.path.join(outPath , str(a) + "." + str(b) + "." + str(c) + "-" + name ),bgrResult)
67
- print(os.path.join(outPath , str(a) + "." + str(b) + "." + str(c) + "-" + name ))
68
-
69
- # BGRで特定の色を抽出する関数
70
- def bgrExtraction(image, bgrLower, bgrUpper):
71
- img_mask = cv2.inRange(image, bgrLower, bgrUpper) # BGRからマスクを作成
72
- result = cv2.bitwise_and(image, image, mask=img_mask) # 元画像とマスクを合成
73
- return result
74
-
75
- if __name__ == '__main__':
76
- test()
77
-
78
- ```
15
+ ```
16
+ で上書きをしています。
17
+ 変数名の重複を防ぐため、変数名を変えてみてはどうでしょうか。