肤色检测算法

您所在的位置:网站首页 人脸的颜色分布 肤色检测算法

肤色检测算法

2024-03-27 21:04| 来源: 网络整理| 查看: 265

基于RGB颜色空间的简单阈值肤色识别

在human skin color clustering for face detection一文中提出如下简单的判别算式:

R>95 And G>40 And B>20 And R>G And R>B And Max(R,G,B)-Min(R,G,B)>15 And Abs(R-G)>15

算法非常之简单,同样主要把复杂的判断条件放到后面去判断,能有效的降低程序的执行时间,代码实现如下:

Mat SkinDetection(Mat src) { int row = src.rows; int col = src.cols; int channels = src.channels(); Mat dst(row, col, CV_8UC3); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { int B = src.at(i, j)[0]; int G = src.at(i, j)[1]; int R = src.at(i, j)[2]; for (int k = 0; k < 3; k++) { dst.at(i, j)[k] = src.at(i, j)[k]; } int maxx, minn; if (R > 95 && G > 40 && B > 20 && R > B && R > G && abs(R - G) > 15) { if (B >= G) { maxx = B; minn = G; } else { maxx = G; minn = B; } if (R > maxx) maxx = R; else if (R < minn) minn = R; if (maxx - minn > 15) { for (int k = 0; k < 3; k++) { dst.at(i, j)[k] = 255; } } } } } return dst; } 效果

在这里插入图片描述在这里插入图片描述

基于YCbCr颜色空间的简单阈值肤色识别

该算法则更为简单,将图像转换到YCbCr颜色空间,然后按下述计算式判断是否属于皮肤区域: (Cb > 77 And Cb < 127) And (Cr > 133 And Cr < 173)

const float YCbCrYRF = 0.299F; // RGB转YCbCr的系数(浮点类型) const float YCbCrYGF = 0.587F; const float YCbCrYBF = 0.114F; const float YCbCrCbRF = -0.168736F; const float YCbCrCbGF = -0.331264F; const float YCbCrCbBF = 0.500000F; const float YCbCrCrRF = 0.500000F; const float YCbCrCrGF = -0.418688F; const float YCbCrCrBF = -0.081312F; const float RGBRYF = 1.00000F; // YCbCr转RGB的系数(浮点类型) const float RGBRCbF = 0.0000F; const float RGBRCrF = 1.40200F; const float RGBGYF = 1.00000F; const float RGBGCbF = -0.34414F; const float RGBGCrF = -0.71414F; const float RGBBYF = 1.00000F; const float RGBBCbF = 1.77200F; const float RGBBCrF = 0.00000F; const int Shift = 20; const int HalfShiftValue = 1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3