2021年5月16日 星期日

s1071441 的作業 4

 一、作業說明

利用你所學的Color顏色的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。


二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

OpenCV 4.5.1.48

Python 3.8.3

Numpy 1.19.5


三、實作方法與分析

imread讀取圖片 

先用GuassianBlur 處理掉過度細節及雜訊

HSV:

用cv2.cvtColor() 將圖片轉成hsv color space

決定膚色的範圍 並做出mask

一開始決定為 0<h<40 , 50<s<130 , 50<v<255:


後面的樹葉跟偏紅色的衣服都沒刪掉所以將 h 改成 5<h<20:


膚色較深的部分被刪掉了且沙子很多沒刪掉,所以將 s 改成 70<s<150,v改成20<v<255:

標示出來:

---------------------------------------------------------------------------------------------------------

RGB:

一開始將膚色範圍設成: R>95 and G>40 and B>20 and R>G and R>B:


樹葉跟偏紅色的衣服都沒刪掉,所以將R跟綠G差距 和 R跟B的差距限制加大


偏黑的膚色應該是因為R,G,B的數值比較相近所以也被刪掉了,如果考慮進來可能會導致後面的樹木沒刪掉。標示出來:


---------------------------------------------------------------------------------------------------------
YCbCr:
一開始設的膚色範圍為

133 <= Cr <= 173 , 77 <= Cb <= 127:
樹葉都沒刪掉,所以增加紅色色度Cr的下限至140:

標示出來:
分析:
RGB能直接從三原色的數值及之間的差距控制,所以結果比較容易調到接近最佳
HSV用角度表示所有顏色,比較容易篩選最初的顏色


沒有留言:

張貼留言