代码:
/* 输入:rgb图像 输出:与输入图像尺寸相同的灰度图,若rgb图中某像素检测为肤色,则灰度图中对应像素为255,否则为0 */ void SkinRGB( Mat &rgb,Mat &dst){ assert(rgb.channels() == 3 ); const int R = 2; const int G = 1; const int B = 0; dst = Mat::zeros(rgb.rows, rgb.cols, CV_8U); for (int i = 0; i < rgb.rows; i++){ Vec3b* ptr = rgb.ptr<Vec3b>(i); uchar* ptr_mask = dst.ptr<uchar>(i); for (int j = 0; j < rgb.cols; j++){ Vec3b pixel = ptr[j]; if ((pixel[R] > 95 && pixel[G]>40 && pixel[B] > 20 && pixel[R] - pixel[B]>15 && pixel[R] - pixel[G]>15) || (pixel[R]>200 && pixel[G]>210 && pixel[B]>170 && abs(pixel[R] - pixel[B]) <= 15 && pixel[R]>pixel[B] && pixel[G]>pixel[B])){ ptr_mask[j] = 255; } } } }
效果:
时间: 2024-10-11 13:23:21