回答編集履歴

2

d

2020/02/20 08:52

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -37,3 +37,17 @@
37
37
  print(mean)
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ ## 解説
44
+
45
+
46
+
47
+ 1. `mask == 255` で mask の値が 255 の要素は True、そうでない要素は False の配列が得られる。
48
+
49
+ 2. ブールは、True は1、False は0と同値なので、`(mask == 255).sum()` で mask の値が 255 の要素数が計算できる
50
+
51
+ 3. cv2.bitwise_and(img, mask) で mask の値が 255 でない img の画素は0に置き換わる。
52
+
53
+ 4. masked_img[masked_img < 200].sum() で masked_img の値が 200 未満の輝度値の合計が計算できる。(対象外の画素は0なので足してしまっても問題ない)

1

d

2020/02/20 08:52

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
  ```python
6
+
7
+ import cv2
6
8
 
7
9
  import numpy as np
8
10
 
@@ -10,7 +12,27 @@
10
12
 
11
13
  img = np.random.randint(0, 256, (300, 300)).astype(np.uint8)
12
14
 
15
+
16
+
17
+
18
+
19
+ ## マスク作成
20
+
21
+ mask = np.zeros_like(img)
22
+
23
+ cv2.circle(mask, (100, 100), 50, color=255, thickness=-1)
24
+
25
+
26
+
27
+ # 計算対象外をマスクする。
28
+
29
+ masked_img = cv2.bitwise_and(img, mask)
30
+
31
+
32
+
33
+ n_pixels = (mask == 255).sum()
34
+
13
- mean = img[img < 200].mean()
35
+ mean = masked_img[masked_img < 200].sum() / n_pixels
14
36
 
15
37
  print(mean)
16
38