在YCbCr色度空间,分离出对肤色相对不敏感的亮度信息,重点考察CbCr色度信号,有利于数据的检测。通过Mask掩码操作,也是一种方法。
工具/原料
pycharmpython
opencvwindows
方法/步骤
1、利用YCbCr色度空娩麇嗵伎间的特点,使用CbCr两种色度进行控制得到一个掩码矩阵,然后让源图和Mask进行与运算,从而得到我们想要的效果。还是来一张源图以及头文件import艘早祓胂cv2ascvimportnumpyasnpimage=cv.imread('c:\\handtest.jpg',cv.IMREAD_COLOR)cv.imshow("image",image)
2、#把图像转换到YCBCRYCrCb=cv.cvtColor(image,cv.COLOR_BGR2YCrCb)cv.imshow("YCrCb",YCrCb)
3、(Y,Cr,Cb)=cv.split(YCrCb)cv.imshow("Y",Y)cv.imshow("Cr",Cr)cv.imshow("Cb",Cb)
4、#高斯滤波CrCb分别进行GaussianBlurCr=cv.G瞢铍库祢aussianBlur(Cr荑樊综鲶,(5,5),0)GaussianBlurCb=cv.GaussianBlur(Cb,(5,5),0)maskNew=np.zeros(Cr.shape,dtype=np.uint8)构造Mask(x,y)=Cr.shapeprint(x,y)得到:x=425y=600
5、forii艘绒庳焰nrange(0,x):forjinrange(0,y):if(GaussianBlurC鸡堕樱陨r[i][j]>140)and(GaussianBlurCr[i][j]<175)and(GaussianBlurCb[i][j]>80)and(GaussianBlurCb[i][j]<140):maskNew[i][j]=255else:maskNew[i][j]=0选择Cr140-175为255Cb80-140为0这是肤色经验值。变成二值图Mask
6、bitwise_andImage=cv.bitwise_and(image,image,mask=maskNew)原图和二值掩码与运算!cv.imshow("bitwise_andImage",bitwise_andImage)cv.waitKey(0)cv.destroyAllWindows()其结果和阈值法差不多