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);
}