diff --git a/3_10_labeled.png b/3_10_labeled.png new file mode 100644 index 0000000..6289f12 Binary files /dev/null and b/3_10_labeled.png differ diff --git a/3_10_moving.png b/3_10_moving.png new file mode 100644 index 0000000..8000f17 Binary files /dev/null and b/3_10_moving.png differ diff --git a/3_11_tracking.png b/3_11_tracking.png new file mode 100644 index 0000000..3230da4 Binary files /dev/null and b/3_11_tracking.png differ diff --git a/3_1_resize.png b/3_1_resize.png new file mode 100644 index 0000000..0083f67 Binary files /dev/null and b/3_1_resize.png differ diff --git a/3_1_resize_rotate.py b/3_1_resize_rotate.py index 07ab223..6c9e9e3 100644 --- a/3_1_resize_rotate.py +++ b/3_1_resize_rotate.py @@ -14,6 +14,8 @@ else: # 元画像の高さと幅を取得 height, width = img.shape[:2] + print(f"{height}x{width}") + # 縦横を1/2のサイズに計算 new_width = width // 2 new_height = height // 2 diff --git a/3_1_rotate.png b/3_1_rotate.png new file mode 100644 index 0000000..83b479b Binary files /dev/null and b/3_1_rotate.png differ diff --git a/3_2_grayscale.png b/3_2_grayscale.png new file mode 100644 index 0000000..290605e Binary files /dev/null and b/3_2_grayscale.png differ diff --git a/3_3_binarize.png b/3_3_binarize.png new file mode 100644 index 0000000..f7ba1c6 Binary files /dev/null and b/3_3_binarize.png differ diff --git a/3_4_roi.png b/3_4_roi.png new file mode 100644 index 0000000..79f145d Binary files /dev/null and b/3_4_roi.png differ diff --git a/3_4_roi.py b/3_4_roi.py index bba14be..e8fdf2a 100644 --- a/3_4_roi.py +++ b/3_4_roi.py @@ -15,10 +15,10 @@ else: # --- ROI(関心領域)の指定 --- # 切り出す領域の開始位置と終了位置を計算(例として、画像の中心部分を切り出し) - start_y = height // 4 - end_y = height * 3 // 4 - start_x = width // 4 - end_x = width * 3 // 4 + start_y = 248 + end_y = 361 + start_x = 67 + end_x = 208 # --- 画像の切り出し --- # NumPy配列のスライス機能を使用して、指定した範囲を切り出す diff --git a/3_5_canny.png b/3_5_canny.png new file mode 100644 index 0000000..fe990e1 Binary files /dev/null and b/3_5_canny.png differ diff --git a/3_5_laplacian.png b/3_5_laplacian.png new file mode 100644 index 0000000..277ae53 Binary files /dev/null and b/3_5_laplacian.png differ diff --git a/3_5_sobel.png b/3_5_sobel.png new file mode 100644 index 0000000..dd658b9 Binary files /dev/null and b/3_5_sobel.png differ diff --git a/3_6_color_extraction.py b/3_6_color_extraction.py index e44c603..401e463 100644 --- a/3_6_color_extraction.py +++ b/3_6_color_extraction.py @@ -18,7 +18,7 @@ else: # --- 肌色の範囲を指定 (HSV) --- # OpenCVにおけるH(色相)は0〜179、S(彩度)とV(明度)は0〜255 # ※画像の色合いや照明条件に合わせて微調整が必要です - lower_skin = np.array([0, 0, 70]) # 下限値 (H, S, V) + lower_skin = np.array([0, 20, 70]) # 下限値 (H, S, V) upper_skin = np.array([20, 255, 255]) # 上限値 (H, S, V) # --- マスク画像の作成 --- diff --git a/3_6_extract_skin.png b/3_6_extract_skin.png new file mode 100644 index 0000000..fa9fc6a Binary files /dev/null and b/3_6_extract_skin.png differ diff --git a/3_6_skin_mask.png b/3_6_skin_mask.png new file mode 100644 index 0000000..0fc0ad6 Binary files /dev/null and b/3_6_skin_mask.png differ diff --git a/3_7_d2e.png b/3_7_d2e.png new file mode 100644 index 0000000..82bd840 Binary files /dev/null and b/3_7_d2e.png differ diff --git a/3_7_e2d.png b/3_7_e2d.png new file mode 100644 index 0000000..4da4022 Binary files /dev/null and b/3_7_e2d.png differ diff --git a/3_7_morphology.py b/3_7_morphology.py index 6182d76..db1dcb9 100644 --- a/3_7_morphology.py +++ b/3_7_morphology.py @@ -1,43 +1,44 @@ # 実験課題7 -# 3.7 膨張・収縮 +# 3.7 膨張・収縮(白黒の2値画像に対する処理へ修正版) import cv2 import numpy as np -# 3.6の画像(色領域を抽出した画像)を準備するための前処理 +# 画像の読み込み image_path = 'person.jpg' img = cv2.imread(image_path) if img is None: print("画像を読み込めませんでした。ファイルパスを確認してください。") else: - # 3.6の処理(肌色領域の抽出)を再現 + # 3.6の処理:HSV変換 hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) - lower_skin = np.array([0, 0, 70]) + + # 肌色の範囲を指定 + lower_skin = np.array([0, 20, 70]) upper_skin = np.array([20, 255, 255]) - skin_mask = cv2.inRange(hsv_img, lower_skin, upper_skin) - extracted_img = cv2.bitwise_and(img, img, mask=skin_mask) + + # inRangeで作成されるこの画像が、対象が白(255)で背景が黒(0)の「2値画像(白黒画像)」です + mask_img = cv2.inRange(hsv_img, lower_skin, upper_skin) # --- 膨張・収縮のための構造要素(カーネル)の定義 --- - # 5x5の正方形のカーネルを作成 - kernel = np.ones((5, 5), np.uint8) + kernel = np.ones((3, 3), np.uint8) # --- ① 収縮 3回 → 膨張 3回(オープニング処理) --- - # まず収縮(erode)を3回実行 - eroded_first = cv2.erode(extracted_img, kernel, iterations=3) - # その後、膨張(dilate)を3回実行 + # 処理の対象を mask_img(白黒画像) に変更 + eroded_first = cv2.erode(mask_img, kernel, iterations=3) seq_opening = cv2.dilate(eroded_first, kernel, iterations=3) # --- ② 膨張 3回 → 収縮 3回(クロージング処理) --- - # まず膨張(dilate)を3回実行 - dilated_first = cv2.dilate(extracted_img, kernel, iterations=3) - # その後、収縮(erode)を3回実行 + # 処理の対象を mask_img(白黒画像) に変更 + dilated_first = cv2.dilate(mask_img, kernel, iterations=3) seq_closing = cv2.erode(dilated_first, kernel, iterations=3) # --- 結果の表示 --- - cv2.imshow('Original Extracted Image (3.6)', extracted_img) - cv2.imshow('Sequence 1: Erosion 3 -> Dilation 3', seq_opening) - cv2.imshow('Sequence 2: Dilation 3 -> Erosion 3', seq_closing) + # 白黒のマスク画像がどのように変化するかを確認します + cv2.imshow('1. Original Mask (Black & White)', mask_img) + cv2.imshow('2. Erode 3 -> Dilate 3', seq_opening) + cv2.imshow('3. Dilate 3 -> Erode 3', seq_closing) # キー入力待ち cv2.waitKey(0) diff --git a/3_9_face_mask.png b/3_9_face_mask.png new file mode 100644 index 0000000..677ab76 Binary files /dev/null and b/3_9_face_mask.png differ diff --git a/sample.jpg b/sample.jpg index 4c76248..c20ccb1 100644 Binary files a/sample.jpg and b/sample.jpg differ