double CSkinFeatureExtractor::detect_image_pixel(const IRgbImage &img, CRgbImage &skinimage, double &nFaceArea, double &mainFaceArea) const { // the core codes // 1. face //CRgbImage *image = (CRgbImage*)&img; //image->Save(L"temp.jpg"); CRgbImage image; image.Copy(img); CDoubleFeature face; try { face = m_faceFeatureExtractor.Extract(image); } catch (exception e) { face = CDoubleFeature(0, 7); } double n = face[0]; nFaceArea = n + face[1]; mainFaceArea = face[2]; if (n <= 0) { face[3] = -1; face[4] = img.Height(); face[5] = -1; face[6] = img.Width(); } //m_faceFeatureExtractor.Extract(face, img); //int histogramnum = clusternum;//positiveclusternum; // 2. segment Segments segments; if (isEnableSegment) segment(img, segments); // 3. skin skinimage = SkinDetector(img); return AdultScore(skinimage, face, segments); }
void SkinDetector_OPENCV::detectSkin() { CvAdaptiveSkinDetector SkinDetector(1, CvAdaptiveSkinDetector::MORPHING_METHOD_NONE); IplImage *SrcImgPtr = &SrcImage.operator IplImage(); IplImage *DstImgPtr = &DstImage.operator IplImage(); SkinDetector.process(SrcImgPtr, DstImgPtr); }