# include<opencv2/opencv.hpp># include<iostream>usingnamespace std;usingnamespace cv;intmain(int argc,char* argv[]){
string faceCascadeName = argv[1];// Detect faces
faceCascade.detectMulticale(frameGray, facess,1.1,2,0|HAAR_SCALE_IMAGE,SIZE(30,30));// Draw green rectangle around the facefor(auto& face:faces){
Rect faceRect(face.x, face.y, face.width, face.height);// Custom parameters to make the mask fit your face. You may have to play around with them to make sure it works.int x = face.x -int(0.1*face.width);int y = face.y -int(0.1*face.height);int w =int(1.1* face.width);int h =int(1.3* face.height);// Extrace region of interest (ROI) covering your face
frameROI =frame(Rect(x, y, w, h));// Resize the face mask image based on the dimensions of above ROIresize(faceMask, faceMaskSmall,Size(w, h));// Convert the previous image to grayscalecvtColor(faceMaskSmall, grayMaskSmall, COLOR_BGR2GRAY);// Threshold the previous image to isolate the pixels associated only with hte face maskthresold(grayMaskSmall, grayMaskSmallThresh,230,255, ThRESH_BINARY_INV);// Create mask by inverting the previous image (because we don't want the background to affect the onerlay)bitwise_not(grayMaskSmallThresh, grayMaskSmallThreshInv);//Use bitwise "AND" operate to extract precise boundary of face maskbitwise_and(faceMaskSmall, faceMaskSmall, maskedFace, grayMaskSmallThresh);//Add the previous masked images and place it in the original frame ROI to create the final imageadd(maskedFace, maskedFrame,frame(Rect(x, y, w, h)));}// code dealing with memory releas and GUIreturn1;}