Пример #1
0
	def calcHistogram(self,frameSmallHSV,inSideFace,hBins,sBins):
		#sets the Region of Interest (face) in HSV image
		cv.SetImageROI(frameSmallHSV, inSideFace);
		face = cv.CreateImage(cv.GetSize(frameSmallHSV),frameSmallHSV.depth,frameSmallHSV.nChannels);
		cv.Copy(frameSmallHSV, face);
		cv.ResetImageROI(frameSmallHSV);
		#get size of face area
		faceArea = face.height*face.width

		hist = hs_histogram(face)
		myHist = hist.getHist(hBins, sBins)
		(_, maxValue, _, _) = cv.GetMinMaxHistValue(myHist)
		hasHist = True
		myHistMat = cv.CreateMat(hBins, sBins, 1)
		for h in range(hBins):
				for s in range(sBins):
					binVal = cv.QueryHistValue_2D(myHist, h, s)
					myHistMat[h,s] = binVal        
		return myHistMat,hasHist,maxValue
                pt1 = (int(bestFaceX), int(bestFaceY))
                pt2 = (int((bestFaceX + bestFaceW)), int((bestFaceY + bestFaceH)))
                cv.Rectangle(frameSmall, pt1, pt2, cv.RGB(0, 255, 0), 3, 8, 0)
                ###################################
                ########calculate histogram########
                if biggestFace>0: 
                    #sets the Region of Interest (face) in HSV image
                    cv.SetImageROI(frameSmallHSV, rect);
                    face = cv.CreateImage(cv.GetSize(frameSmallHSV),frameSmallHSV.depth,frameSmallHSV.nChannels);
                    cv.Copy(frameSmallHSV, face);
                    cv.ResetImageROI(frameSmallHSV);
                    #get size of face area
                    faceArea = face.height*face.width

                    hist = hs_histogram(face)
                    myHist = hist.getHist(hBins, sBins)
                    (_, maxValue, _, _) = cv.GetMinMaxHistValue(myHist)
                    print "face detected >>> Histogram constructed"
                    hasHist = True
                ###################################

            else: # if hist already calculated
                skinProbImg = cv.CreateImage(cv.GetSize(frameSmallHSV),8,1);
                hueImg      = cv.CreateMat(frameSmallHSV.height, frameSmallHSV.width, cv.CV_8UC1)
                satImg      = cv.CreateMat(frameSmallHSV.height, frameSmallHSV.width, cv.CV_8UC1)
                cv.Split(frameSmallHSV, hueImg, satImg, None, None)

                binSum = face.height*face.width
                maxProbInt = 0
                for x in range(0, frameSmallHSV.height):
                    (bestFaceX + bestFaceW)), int((bestFaceY + bestFaceH)))
                cv.Rectangle(frameSmall, pt1, pt2, cv.RGB(0, 255, 0), 3, 8, 0)
                ###################################
                ########calculate histogram########
                if biggestFace > 0:
                    #sets the Region of Interest (face) in HSV image
                    cv.SetImageROI(frameSmallHSV, rect)
                    face = cv.CreateImage(cv.GetSize(frameSmallHSV),
                                          frameSmallHSV.depth,
                                          frameSmallHSV.nChannels)
                    cv.Copy(frameSmallHSV, face)
                    cv.ResetImageROI(frameSmallHSV)
                    #get size of face area
                    faceArea = face.height * face.width

                    hist = hs_histogram(face)
                    myHist = hist.getHist(hBins, sBins)
                    (_, maxValue, _, _) = cv.GetMinMaxHistValue(myHist)
                    print "face detected >>> Histogram constructed"
                    hasHist = True
                ###################################

            else:  # if hist already calculated
                skinProbImg = cv.CreateImage(cv.GetSize(frameSmallHSV), 8, 1)
                hueImg = cv.CreateMat(frameSmallHSV.height,
                                      frameSmallHSV.width, cv.CV_8UC1)
                satImg = cv.CreateMat(frameSmallHSV.height,
                                      frameSmallHSV.width, cv.CV_8UC1)
                cv.Split(frameSmallHSV, hueImg, satImg, None, None)

                binSum = face.height * face.width
Пример #4
0
    def __init__(self,img,hasColor):

        cascade = cv.Load("haarcascades\haarcascade_frontalface_alt.xml")

        rect = (0,0,1,1)

        # allocate temporary images
        gray = cv.CreateImage((img.width,img.height), 8, 1)

        # convert color input image to grayscale
        cv.CvtColor(img, gray, cv.CV_BGR2GRAY)

        # scale input image for faster processing
        cv.EqualizeHist(gray, gray)
        
        faces = cv.HaarDetectObjects(gray, cascade, cv.CreateMemStorage(0),
                                     haar_scale, min_neighbors, haar_flags, min_size)
        if faces:
            for ((x, y, w, h), n) in faces:

                faceX = x
                faceY = y
                faceW = w
                faceH = h
                
                reScale = 0.2
                horScl = int(faceW * reScale)
                verScl = int(faceH * reScale)
                    
                rect = (faceX+horScl,faceY+verScl,faceW-(horScl*2),faceH-(verScl*2))

                pt1 = (int(x), int(y))
                pt2 = (int((x + w)), int((y + h)))
                cv.Rectangle(img, pt1, pt2, cv.RGB(255, 0, 0), 3, 8, 0)

        cv.ShowImage("result", img)
        
        #sets the Region of Interest
        cv.SetImageROI(img, rect);
        face = cv.CreateImage(cv.GetSize(img),img.depth,img.nChannels);
        #copy subimage */
        cv.Copy(img, face);
        #always reset the Region of Interest */
        cv.ResetImageROI(img);
        cv.ShowImage("resultFace", face)

        hist = hs_histogram(face)
        myHist = hist.getHist()
        cv.ShowImage("histImg", myHist) #original
        [histHue,histSat] = hist.getMinMax()
        print "hueBin: %d  >>> satBin:%d" % (histHue,histSat)
        
        #as initialized in hs_histogram.py
        h_bins = 9
        s_bins = 16

        hueFromHist = int(int((180/9)*histHue)+int((180/9)*histHue+1)/2)
        satFromHist = int(int((255/9)*histSat)+int((255/9)*histSat+1)/2)
        
        if not hasColor:
            global H
            global S         
            H = hueFromHist
            S = satFromHist
            hasColor=1