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

回答編集履歴

1

抽出に使用したコードを追記

2018/07/06 11:39

投稿

shiron46
shiron46

スコア111

answer CHANGED
@@ -9,4 +9,38 @@
9
9
  ---
10
10
  上述した方法で2値化した対象画像です。
11
11
  多少のJPEGノイズはありますが、ほぼ問題なく抽出できています。
12
- ![イメージ説明](25666531278d47ffb7cb3f39e86b1b39.jpeg)
12
+ ![イメージ説明](25666531278d47ffb7cb3f39e86b1b39.jpeg)
13
+
14
+ ---
15
+ ### 使用したコード
16
+ ```Python
17
+ import cv2
18
+ import numpy as np
19
+
20
+
21
+ def extract_by_colors(img_in, r, g, b, margin):
22
+ # 取得する色の範囲を指定
23
+ lower_r = max(r - margin, 0)
24
+ upper_r = min(r + margin, 255)
25
+ lower_g = max(g - margin, 0)
26
+ upper_g = min(g + margin, 255)
27
+ lower_b = max(b - margin, 0)
28
+ upper_b = min(b + margin, 255)
29
+ lower = np.array([lower_b, lower_g, lower_r])
30
+ upper = np.array([upper_b, upper_g, upper_r])
31
+
32
+ # 指定した色に基づいてマスク画像を作成し、元画像をマスク
33
+ img_out = cv2.bitwise_and(img_in, img_in, mask=cv2.inRange(img_in, lower, upper))
34
+
35
+ # 2値化
36
+ img_gray = cv2.cvtColor(img_out, cv2.COLOR_RGB2GRAY)
37
+ dummy, img_out = cv2.threshold(img_gray, 50, 255, cv2.THRESH_BINARY_INV)
38
+
39
+ return img_out
40
+
41
+
42
+ if __name__ == "__main__":
43
+ img_in = cv2.imread("input.jpg")
44
+ img_out = extract_by_colors(img_in, 0, 128, 255, 127)
45
+ cv2.imwrite("output.jpg", img_out)
46
+ ```