HSV肤色检测

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 space from rgb to hsv
imgHsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

for r in range(rows):
    for c in range(cols):
 
        # get values of hue, saturation and value
        # standard -- h ran
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是结合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、付费专栏及课程。

余额充值