# 実験課題7 # 3.7 膨張・収縮 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の処理(肌色領域の抽出)を再現 hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) lower_skin = np.array([0, 0, 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) # --- 膨張・収縮のための構造要素(カーネル)の定義 --- # 5x5の正方形のカーネルを作成 kernel = np.ones((5, 5), np.uint8) # --- ① 収縮 3回 → 膨張 3回(オープニング処理) --- # まず収縮(erode)を3回実行 eroded_first = cv2.erode(extracted_img, kernel, iterations=3) # その後、膨張(dilate)を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回実行 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.waitKey(0) cv2.destroyAllWindows()