s1081440 作業5
主題: 皮膚偵測 Skin Color Detection
一、 題目說明:
利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚 區域並將其標示出。(請用附件中的三張照片做測試) Write a program that detect skin color from an image.
二、開發環境:
Windows 11+Visual Studio Code+Python 3.10.4+openCV 4.7.0
三、程式碼
import numpy as np
import cv2
img1 = cv2.imread('img1.jpg', cv2.COLOR_BGR2HSV)
img2 = cv2.imread('img2.jpg', cv2.COLOR_BGR2HSV)
img3 = cv2.imread('img3.jpg', cv2.COLOR_BGR2HSV)
def skin_detect(image):
# 定義皮膚的顏色區間
lower = np.array([0, 48, 80], dtype="uint8")
upper = np.array([20, 255, 255], dtype="uint8")
# 將圖片顏色由RGB顏色空間轉為HSV顏色空間,並根據先前定義的膚色區間製作mask
converted = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
skinMask = cv2.inRange(converted, lower, upper)
# 將一些被誤認為皮膚的區間刪除
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11, 11))
skinMask = cv2.erode(skinMask, kernel, iterations=2)
skinMask = cv2.dilate(skinMask, kernel, iterations=2)
# 利用高斯模糊將mask邊緣的noise緩和
skinMask = cv2.GaussianBlur(skinMask, (3, 3), 0)
# 輸出結果
skin = cv2.bitwise_and(image, image, mask=skinMask)
cv2.imshow("images", np.hstack([image, skin]))
cv2.waitKey(0)
skin_detect(img1)
skin_detect(img2)
skin_detect(img3)
留言
張貼留言