s1091444 作業5

 同步發布於 Tita's Blog


功課要求

偵測輸入照片中的皮膚區域並將其標示出:



成果



開發環境

  • OS: Windows 10
  • Editor: Visual Studio Code
  • Language: Python 3.9.16
  • OpenCV: 4.5.4


實作

使用的 libraries 如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np


1/ 利用迴圈讀入三張圖片

建立一個儲存三張圖片路徑的 list ,使用迴圈搭配 cv2.imread(filename) 讀入圖片並顯示。 
顯示圖片中有一點要注意, plt 使用的彩色圖片是 RGB ,而 OpenCV 讀入的圖片是以 BGR 編碼,所以必須透過 cv2.cvtColor(original_img, cv2.COLOR_BGR2RGB)來轉換要顯示的圖片,不然就會出現三名藍色皮膚的人。

2/ 轉換圖片色域並設定膚色範圍

RGB 色域容易受到光線等因素影響,導致難以判斷顏色是否為膚色,使用 cv2.cvtColor(src, code) 轉換至 HSV 色域後就能把色相、飽和度、明度分開看。

調整過後我仍舊無法避免有些非皮膚(頭髮、陰影等)處還是會被判別為膚色 QQ

3/ 提取膚色區域

使用 cv2.inRange(src, lowerb, upperb) 提取膚色區域,獲得一張和原尺寸相同大小的二值化 mask ,膚色區域為白色,其他地方為黑色,就如結果圖中第二個 column 顯示的那樣。

4/ 將原圖膚色區域標示為紅色

最後在 skin_mask 不為 0 的像素,更改原圖的顏色為紅色。

參考資料


留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1