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
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() |