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