回答編集履歴

1

d

2020/09/15 05:53

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -27,3 +27,95 @@
27
27
 
28
28
 
29
29
  [OpenCV - 画像を切り抜く、チャンネルを分離、結合する方法 - pystyle](https://pystyle.info/opencv-ndarray-manipulation/#outline__3)
30
+
31
+
32
+
33
+ ## 追記
34
+
35
+
36
+
37
+ ```python
38
+
39
+ import cv2
40
+
41
+
42
+
43
+
44
+
45
+ cascade_path = "haarcascade_frontalface_alt.xml"
46
+
47
+ # カスケード分類器の特徴量取得
48
+
49
+ cascade = cv2.CascadeClassifier(cascade_path)
50
+
51
+
52
+
53
+
54
+
55
+ # 画像を読み込む。
56
+
57
+ img = cv2.imread("image.jpg")
58
+
59
+
60
+
61
+ # グレースケールに変換する。
62
+
63
+ grayscale_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
64
+
65
+
66
+
67
+ # 検出する。
68
+
69
+ faces = cascade.detectMultiScale(grayscale_img, minSize=(100, 100))
70
+
71
+
72
+
73
+
74
+
75
+ def crop_and_save(path, img, tl, br):
76
+
77
+ """矩形 (tr, br) の範囲を切り抜く。
78
+
79
+ """
80
+
81
+ cropped = img[tl[1] : br[1], tl[0] : br[0]]
82
+
83
+
84
+
85
+ cv2.imwrite(path, cropped)
86
+
87
+
88
+
89
+
90
+
91
+ # 矩形を画像に描画する。
92
+
93
+ for x, y, w, h in faces:
94
+
95
+ cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=10)
96
+
97
+
98
+
99
+ tl = 516 - 113, 123 + 113 # 上半身の左上の座標
100
+
101
+ br = 516 + 1 * 113, 123 + 113 * 4 # 上半身の右下の座標
102
+
103
+ crop_and_save("upper.jpg", img, tl, br)
104
+
105
+ #cv2.rectangle(img, tl, br, color=(0, 0, 255), thickness=10)
106
+
107
+
108
+
109
+ tl1 = 516 - 113, 123 + 113 * 4 # 上半身の左上の座標
110
+
111
+ br1 = 516 + 1 * 113, 123 + 113 * 10 # 上半身の右下の座標
112
+
113
+ crop_and_save("lower.jpg", img, tl1, br1)
114
+
115
+ #cv2.rectangle(img, tl1, br1, color=(0, 0, 255), thickness=10)
116
+
117
+
118
+
119
+ #cv2.imwrite("out3.jpg", img)
120
+
121
+ ```