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.
 

39 lines
1.4 KiB

# 実験課題6
# 色領域抽出
import cv2
import numpy as np
# 画像の読み込み(自身または人物が写っている画像を用意してください)
image_path = 'person.jpg'
img = cv2.imread(image_path)
if img is None:
print("画像を読み込めませんでした。ファイルパスを確認してください。")
else:
# --- 色空間の変換 ---
# BGR色空間からHSV色空間に変換
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# --- 肌色の範囲を指定 (HSV) ---
# OpenCVにおけるH(色相)は0〜179、S(彩度)とV(明度)は0〜255
# ※画像の色合いや照明条件に合わせて微調整が必要です
lower_skin = np.array([0, 20, 70]) # 下限値 (H, S, V)
upper_skin = np.array([20, 255, 255]) # 上限値 (H, S, V)
# --- マスク画像の作成 ---
# inRange関数を使用して、指定した範囲内の画素を255(白)、それ以外を0(黒)とするマスクを作成
skin_mask = cv2.inRange(hsv_img, lower_skin, upper_skin)
# --- 色領域の抽出 ---
# 元画像と元画像をマスクを使って論理積(AND)をとり、肌色の部分だけを残す
extracted_img = cv2.bitwise_and(img, img, mask=skin_mask)
# --- 結果の表示 ---
cv2.imshow('Original Image', img)
cv2.imshow('Skin Mask', skin_mask)
cv2.imshow('Extracted Skin', extracted_img)
# キー入力待ち
cv2.waitKey(0)
cv2.destroyAllWindows()