opencv进阶 ——(十一)基于RMBG实现生活照生成寸照

实现步骤

1、检测人脸,可以使用opencv自带的级联分类器或者dlib实现人脸检测

2、放大人脸范围,调整到正常寸照尺寸

3、基于RMGB算法得到人像掩码

4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可

alpha融合实现

cpp 复制代码
void alphaBlend(cv::Mat& fgImg, cv::Mat& roi, cv::Mat& mask)
{
    for (int i = 0; i < roi.rows; i++)
    {
        for (int j = 0; j < roi.cols; j++)
        {
            auto maskVal = (float)mask.at<uchar>(i, j)/255;
            for (size_t n = 0; n < 3; n++)
            {   
                roi.at<cv::Vec3b>(i, j)[n] = fgImg.at<cv::Vec3b>(i, j)[n]*maskVal + roi.at<cv::Vec3b>(i, j)[n]*(1-maskVal);
            }       
        }
    }
}

如果原图是纯色背景,那么扣取的图片可能存在部分边界色,可以通过一下滤波函数处理一下边界

cpp 复制代码
void filterBoundary(cv::Mat& roi, cv::Mat& mask)
{
    cv::Mat kernel = (cv::Mat_<double>(3, 3) << 1, 2, 1, 
                                                2, 4, 2, 
                                                1, 2, 1);
    kernel /= 16.0; // 归一化

    int sz = 1;
    for (int i = 0; i < roi.rows; i++)
    {
        for (int j = 0; j < roi.cols; j++)
        {
            auto maskVal = (float)mask.at<uchar>(i, j);
            if (maskVal < 255 && maskVal > 0)
            {
                int left = MAX(j - sz, 0);
                int right = MIN(j + sz, roi.cols - 1);
                int top = MAX(i - sz, 0);
                int bottom = MIN(i + sz, roi.rows - 1);
                auto tmpRoi = roi(cv::Rect(left, top, right - left + 1, bottom - top + 1));
                cv::filter2D(tmpRoi, tmpRoi, -1, kernel);
            }       
        }
    }
}
相关推荐
火山引擎开发者社区27 分钟前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发1 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
飞猫的边缘AI2 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI2 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员
镜子AI2 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
向哆哆3 小时前
羊行为目标检测数据集:4类别、2,000张图像 | 目标检测
人工智能·yolo·目标检测·目标跟踪
如若1233 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
赛博守夜人4 小时前
AI安全攻防与治理之十六:对抗样本、恶意文件与多模态攻击,AI 内容安全检测的真实盲区
人工智能·安全
罗西的思考4 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
yh弓长4 小时前
Agent 的 ReAct、Plan、Execute、Reflection 模式
人工智能