# 実験課題6 # 3.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, 0, 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()