OpenCV Using Python——RGB颜色空间和YCbCr颜色空间的混合肤色检测
2015-02-08 09:34
766 查看
RGB颜色空间和YCbCr颜色空间的混合肤色检测
1. 颜色空间混合肤色检测简介
Kukharev等人为了提高模型的稳定性,将多个颜色空间结合,提出RGB颜色空间和YCbCr颜色空间的混合肤色检测器。像素值满足如下条件:2. 实现代码
操纵图像的方法是在前面文章的基础上修改得到的,只是将RGB颜色空间3通道的值和YCbCr颜色空间3通道的值结合起来,然后根据上面原作者给出的判断条件作肤色分割。import cv2 import numpy as np from matplotlib import pyplot as plt ################################################################################ print 'Load Image' imgFile = 'images/small_alice.jpg' # load an original image img = cv2.imread(imgFile) ################################################################################ print 'YCbCr-RGB Skin Model' rows,cols,channels = img.shape ################################################################################ # convert color space from rgb to ycbcr imgYcc = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) # 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() ################################################################################ for r in range(rows): for c in range(cols): # non-skin area if skin equals 0, skin area otherwise skin = 0 ######################################################################## # get values from rgb color space R = img.item(r,c,0) G = img.item(r,c,1) B = img.item(r,c,2) # get values from ycbcr color space Y = imgYcc.item(r,c,0) Cr = imgYcc.item(r,c,1) Cb = imgYcc.item(r,c,2) ######################################################################## # skin color detection if R > G and R > B: if (G >= B and 5 * R - 12 * G + 7 * B >= 0) or (G < B and 5 * R + 7 * G - 12 * B >= 0): if Cr > 135 and Cr < 180 and Cb > 85 and Cb < 135 and Y > 80: skin = 1 # print 'Skin detected!' if 0 == skin: imgSkin.itemset((r,c,0),0) imgSkin.itemset((r,c,1),0) imgSkin.itemset((r,c,2),0) # display original image and skin image plt.subplot(1,2,1), plt.imshow(img), plt.title('Original Image'), plt.xticks([]), plt.yticks([]) plt.subplot(1,2,2), plt.imshow(imgSkin), plt.title('Transformed YCbCr Skin Image'), plt.xticks([]), plt.yticks([]) plt.show() ################################################################################ print 'Goodbye!'
3. 实现结果
实现结果和前两篇文章很相似,但提取的结果比单一的RGB颜色空间分割有一点点破碎;和改进的YCbCr颜色空间的结果相比,很好地剔除了后一幅图片的头发部分。结语
最后,我还是没有给出具体哪一种肤色分割的方法最给力。模型的参数大多取决于原作者们的训练数据。换句话说,满足数据的多样性和数量级后总可以找到满足需求的颜色空间。总之,这种取决于训练数据的参数适用的范围很有限,而且也没有用到像素之间的相关性。实验的结果虽然没有结合到现实中的情况,但相比网络上普遍实现的调用单一颜色空间的方式或多或少会给大家一些启示。相关文章推荐
- OpenCV Using Python——HSV颜色空间和改进的YCbCr颜色空间中的肤色检测
- OpenCV Using Python——RGB颜色空间中的肤色检测
- OpenCV Using Python——RGB颜色空间中的统计肤色模型
- OpenCV-基于YCrCb颜色空间的肤色检测
- RGB颜色空间肤色检测
- 【opencv+python】图像处理之一、颜色空间RGB,Gray与HSV
- opencv学习笔记(一):基于YCrCb颜色空间的肤色检测
- Python基于YCbCr 肤色模型的情色图片检测的简单实现
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
- RGB与YCbCr颜色空间的互相转换公式
- 转:RGB与YCbCr颜色空间的转换(高精度测试)
- YCbCr颜色空间下的一个简便的肤色模型
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
- RGB与YCbCr颜色空间的转换
- OpenCV学习(1) RGB颜色空间
- 肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
- 肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
- RGB与YCbCr颜色空间的转换
- 基于颜色模式的颜色条形码检测(使用python 2.7和opencv 2.2)
- openCV转换颜色空间,建立人体肤色模型