s1093705 作業5

 

膚色偵測Skin Color Detection

題目說明:

利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚

區域並將其標示出。(請用附件中的三張照片做測試)


開發環境:

  • Windows 11 
  • Visual Studio Code
  • Python 3.11.2 
  • Opencv 4.7.0


實作結果:










程式說明:

A. HSV色域

1.把GBR圖像轉換至HSV色域。

img_HSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)


2.設定遮罩,只通過皮膚的HSV色域範圍 

H:0~17

S:15~170

V:0~255

HSV_mask = cv2.inRange(img_HSV, (0, 15, 0), (17,170,255))
HSV_mask = cv2.morphologyEx(HSV_mask, cv2.MORPH_OPEN, np.ones((3,3), np.uint8))


B. YCrCb色域

1. 把GBR圖像轉換至YCrCb色域。

img_HSV = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)


2.設定遮罩,只通過皮膚的HSV色域範圍 

Y:0~255

Cr:135~180

Cb:85~135

YCrCb_mask = cv2.inRange(img_YCrCb, (0, 135, 85), (255,180,135))
YCrCb_mask = cv2.morphologyEx(YCrCb_mask, cv2.MORPH_OPEN, np.ones((3,3), np.uint8))


C. HSV色域 + YCrCb色域

1.將A、B兩者的遮罩混和,取兩者的優點,形成更強化的膚色偵測功能。

global_mask = cv2.bitwise_and(YCrCb_mask,HSV_mask)
global_mask = cv2.medianBlur(global_mask,3)
global_mask = cv2.morphologyEx(global_mask, cv2.MORPH_OPEN, np.ones((4,4), np.uint8))


2. 將照片跟遮罩混和,只取得膚色區域,非膚色區域顯示黑色。

skinHSV = cv2.bitwise_and(image, image, mask = global_mask)

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1