基于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<Vec3b>(i, j)[0];
int G = src.at<Vec3b>(i, j)[1];
int R = src.at<Vec3b>(i, j)[2];
for (int k = 0; k < 3; k++) {
dst.at<Vec3b>(i, j)[k] = src.at<Vec3b>(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;