You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

45 lines
1.7 KiB

# 実験課題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()