QT5+OpenCV磨皮效果

磨皮的详细内容请参考大神的博文:简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节。


根据上面文中所述,磨皮的主要公式为:Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100


其中用到OpenCV的双边滤波:
bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace,int borderType=BORDER_DEFAULT );

以及OpenCV的高斯模糊:
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT );
注意ksize的宽和高必须是奇数


将公式转换为OpenCV代码如下;其中src为原图;dst为输出图片;输入参数value1为磨皮程度,value2为细节程度;尽量保持分步处理,合并步骤可能会出错
void buffing(int value1,int value2)
{
    int dx = value1*5;    //双边滤波参数之一
    double fc = value1*12.5; //双边滤波参数之一
    int p = 50;//透明度
    Mat temp1,temp2,temp3,temp4;
    
    //双边滤波
    bilateralFilter(src, temp1, dx, fc, fc);
    
    temp2 = (temp1 - src + 128);
    
    //高斯模糊
    GaussianBlur(temp2, temp3, Size(2*value2 - 1, 2*value2 - 1), 0, 0);

    temp4 = src + 2*temp3 - 255;

    dst = ( src*(100-p) + temp4*p ) / 100;
}


神奇的效果图

QT5+OpenCV磨皮效果_第1张图片

你可能感兴趣的:(qt,opencv,qt5)