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);
            }       
        }
    }
}
相关推荐
Mintopia7 分钟前
Claude Code CLI UI
人工智能·aigc·全栈
Mr.Winter`9 分钟前
基于Proto3和单例模式的系统参数配置模块设计(附C++案例实现)
c++·人工智能·单例模式·机器人
Mintopia14 分钟前
🌐 动态网络环境下的 WebAIGC 断点续传与容错技术
前端·人工智能·aigc
qinyia18 分钟前
WisdomSSH解决因未使用Docker资源导致的磁盘空间不足问题
运维·服务器·人工智能·后端·docker·ssh·github
Stark-C30 分钟前
凭实力出圈,头戴耳机的六边形战士!性价比拉满的iKF Mars实测
人工智能
CoovallyAIHub37 分钟前
超越YOLOv8/v11!自研RKM-YOLO为输电线路巡检精度、速度双提升
深度学习·算法·计算机视觉
paperxie_xiexuo39 分钟前
面向多场景演示需求的AI辅助生成工具体系研究:十类平台的功能分型、技术实现与合规应用分析
大数据·人工智能·powerpoint·ppt
aneasystone本尊1 小时前
学习 LiteLLM 的缓存系统
人工智能
CNRio1 小时前
人工智能基础架构与算力之2 异构算力合池技术:打破资源壁垒的分布式 AI 部署方案
人工智能·分布式
Zlssszls1 小时前
全运会展现科技魅力,数字孪生打造智慧场馆新标杆
人工智能·科技·数字孪生·智慧场馆·全运会