标记肤色

2022-05-28 16:06:27 浏览数 (1)

代码语言:javascript复制
import cv2
img=cv2.imread("C:/Users/xpp/Desktop/image.png")
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#将图片从BGR色彩空间转换到HSV色彩空间
h,s,v=cv2.split(hsv)#顺序是h,s,v
minHue=5
maxHue=170
hueMask=cv2.inRange(h,minHue,maxHue)#色调值在[5,170]之间
minSat=25
maxSat=166
satMask=cv2.inRange(s,minSat,maxSat)#饱和度在[25,166]之间
mask=hueMask&satMask
roi=cv2.bitwise_and(img,img,mask=mask)#正常显示感兴趣区域,而将其余区域显示为黑色
cv2.imshow("img",img)
cv2.imshow("ROI",roi)
cv2.waitKey()
cv2.destroyAllWindows()

算法:肤色范围划定为:色调值在[5,170]之间,饱和度值在[25,166]之间(肤色范围根据实际图片设定)。

  • 首先通过inRange函数锁定特定值

dst=cv2.inRange(src, lowerb, upperb)

dst表示输出结果,大小和src一致。

src表示要检查的数组或图像。

lowerb表示范围下界。

upperb表示范围上界。

  • 通过基于掩码的按位与显示ROI
  • 显示特定颜色值

上图是原始图像,图像背景是白色的,下图是提取结果,提取后的图像保留了人像肤色(包含衣服)部分,背景为黑色。

注意:在HSV色彩空间中,H通道(饱和度Hue通道)对应不同的颜色。或者换个角度理解,颜色的差异主要体现在H通道值的不同上。所以,通过对H通道值进行筛选,便能够筛选出特定的颜色。

0 人点赞