Máscara facial em opencv

Entrada: imagem do rosto

Problema: imagem limiar antes de aplicar o Canny para encontrar contornos, mas não retorna a máscara facial

Saída desejada se for inserido um rosto diferente, ele deverá gerar uma máscara facial adequada (área do rosto branca e fundo branco)

Tentei com a imagem da apple ... funciona bem

            #include <opencv2/highgui/highgui.hpp>
            #include <opencv2/core/core.hpp>
            #include <opencv2/imgproc/imgproc.hpp>

            using namespace cv;
            using namespace std;

            int main(){
              Mat right=imread("front.jpg");
              Mat img1;
              cvtColor(right, img1, CV_RGB2GRAY);
              threshold(img1,img1,160,255,cv::THRESH_BINARY);
              Canny(img1, img1, 128, 350);
              vector< vector<Point> > contours;
              findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
              Mat mask = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
              drawContours(mask, contours, -1, Scalar(255), CV_FILLED);
              normalize(mask.clone(), mask, 0.0, 255.0, CV_MINMAX, CV_8UC1);

              imshow("original", right);
              imshow("thresh",img1);
              imshow("mask", mask);

              waitKey(0);
              return 0;
    }

Aqui está a imagem que eu usei

Ignore os 3 primeiros comentários abaixo

questionAnswers(1)

yourAnswerToTheQuestion