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.
44 lines
1.7 KiB
44 lines
1.7 KiB
# 実験課題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() |