HSV肤色检测

该博客探讨了在opencv中使用HSV和改进的YCbCr颜色空间进行肤色检测的方法。HSV空间肤色检测对光照鲁棒但分割效果破碎,而改进的YCbCr空间通过亮度补偿和特定肤色模型实现更好的操作性。实验结果展示了两种方法的优缺点。
摘要由CSDN通过智能技术生成

opencv HSV颜色空间中的肤色检测

 

2. 实现代码

import cv2
import numpy as np
from matplotlib import pyplot as plt
################################################################################

print 'Pixel Values Access'

imgFile = 'images/face.jpg'

# load an original image
img = cv2.imread(imgFile)
################################################################################

print 'HSV Skin Model'

rows,cols,channels = img.shape

# convert color space from bgr to rgb                        
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# prepare an empty image space
imgSkin = np.zeros(img.shape, np.uint8)
# copy original image
imgSkin = img.copy()                       

# convert color 
好的,以下是结合mediapipe手部关键点和HSV肤色检测获取手部蒙版的Python代码: ```python import cv2 import mediapipe as mp import numpy as np # 初始化mediapipe手部检测模块 mp_hands = mp.solutions.hands hands = mp_hands.Hands(static_image_mode=False, max_num_hands=1, min_detection_confidence=0.5) # 设置肤色范围 lower_skin = np.array([0, 20, 70], dtype=np.uint8) upper_skin = np.array([20, 255, 255], dtype=np.uint8) # 打开摄像头 cap = cv2.VideoCapture(0) while True: # 读取摄像头帧 ret, frame = cap.read() if not ret: break # 将帧转换为RGB格式 frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 执行手部检测 results = hands.process(frame_rgb) # 如果检测到手部 if results.multi_hand_landmarks: # 获取手部关键点坐标 landmarks = results.multi_hand_landmarks[0].landmark # 将关键点坐标转换为像素坐标 height, width, _ = frame.shape landmark_points = [] for landmark in landmarks: x, y = int(landmark.x * width), int(landmark.y * height) landmark_points.append([x, y]) # 创建手部蒙版 mask = np.zeros((height, width), dtype=np.uint8) mask = cv2.fillConvexPoly(mask, np.array(landmark_points[:20]), 255) # 进行肤色检测 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) skin_mask = cv2.inRange(hsv, lower_skin, upper_skin) # 将手部蒙版与肤色蒙版相乘,得到手部区域 hand_mask = cv2.bitwise_and(mask, skin_mask) # 显示结果 cv2.imshow('Hand Mask', hand_mask) # 按下“q”键退出 if cv2.waitKey(1) == ord('q'): break # 释放摄像头并关闭窗口 cap.release() cv2.destroyAllWindows() ``` 在这段代码中,我们使用mediapipe模块检测手部关键点,并根据这些关键点创建手部蒙版。然后,我们使用HSV肤色检测过滤出肤色区域,并将手部蒙版与肤色蒙版相乘,得到手部区域的二值图像。最后,我们显示手部区域的二值图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值