# 実験課題7 # 3.7 膨張・収縮(白黒の2値画像に対する処理へ修正版) import cv2 import numpy as np # 画像の読み込み image_path = 'person.jpg' img = cv2.imread(image_path) if img is None: print("画像を読み込めませんでした。ファイルパスを確認してください。") else: # 3.6の処理:HSV変換 hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 肌色の範囲を指定 lower_skin = np.array([0, 20, 70]) upper_skin = np.array([20, 255, 255]) # inRangeで作成されるこの画像が、対象が白(255)で背景が黒(0)の「2値画像(白黒画像)」です mask_img = cv2.inRange(hsv_img, lower_skin, upper_skin) # --- 膨張・収縮のための構造要素(カーネル)の定義 --- kernel = np.ones((3, 3), np.uint8) # --- ① 収縮 3回 → 膨張 3回(オープニング処理) --- # 処理の対象を mask_img(白黒画像) に変更 eroded_first = cv2.erode(mask_img, kernel, iterations=3) seq_opening = cv2.dilate(eroded_first, kernel, iterations=3) # --- ② 膨張 3回 → 収縮 3回(クロージング処理) --- # 処理の対象を mask_img(白黒画像) に変更 dilated_first = cv2.dilate(mask_img, kernel, iterations=3) seq_closing = cv2.erode(dilated_first, kernel, iterations=3) # --- 結果の表示 --- # 白黒のマスク画像がどのように変化するかを確認します 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) cv2.destroyAllWindows()