[Feature] Creating better face masks using opencv::convexHull
alexandarZ opened this issue · comments
Aleksandar Zdravkovic commented
Hi Mateo,
Your work is great! I have one improvement for you. Face mask could be much better extracted using convexHull. This is my code where I use the convex hull method from OpenCV library to extract face mask and results are excellent.
cv::Mat FaceSwap::getFaceMask(cv::Mat &face, std::vector<cv::Point> &facePoints)
{
cv::Mat mask;
mask.create(face.size(), CV_8UC1);
mask.setTo(cv::Scalar::all(0));
// Find convex hull
std::vector<int> hullPtsIndex;
cv::convexHull(facePoints, hullPtsIndex, false, false);
// Create convex polygon based on hull points
cv::Point2i maskPoints[68];
for(int i=0;i<hullPtsIndex.size();i++)
{
maskPoints[i] = facePoints[hullPtsIndex[i]];
}
// Fill mask polygon
cv::fillConvexPoly(mask, maskPoints,hullPtsIndex.size(),cv::Scalar(255));
return mask;
}
Results:
Mateo Hrastnik commented
This is great. I will look into it.