阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

OpenCV实现视频绿幕背景替换功能的示例代码详解

90次阅读
没有评论

共计 1349 个字符,预计需要花费 4 分钟才能阅读完成。

导读 这篇文章主要介绍了如何利用 OpenCV 实现视频绿幕背景替换功能,文中的示例代码讲解详细,对我们学习 OpenCV 有一定的帮助,感兴趣的可以学习一下
1、概述

案例:使用 OpenCV 实现视频绿幕背景替换

算法步骤:

1. 初始化 VideoCapture 并使用其 open 方法加载视频

2.while 循环加读取 frame capture.read(frame)

3. 将 frame 转 hsv 色彩空间

4. 使用 inRange 函数生成遮罩 mask

5. 使用形态学操作降噪 + 边缘平滑

6. 使用 resize 将背景图片的大小搞成视频帧图片的大小

7. 创建一个目标 Mat 用于存放融合后的图像(CV_8UC3)

8. 向目标 Mat 中填入,指定的像素

9. 循环输出 Mat

2、代码示例
Vide_GreenCurtain_Background_Replacement::Vide_GreenCurtain_Background_Replacement(QWidget *parent)
    : MyGraphicsView{parent}
{this->setWindowTitle("视频绿幕背景替换");
}
  
void Vide_GreenCurtain_Background_Replacement::dropEvent(QDropEvent *event){
    const char *filePath= "/Users/yangwei/Documents/tony/opencv/ 课程配套代码与图片 / 代码与图片 /01.mp4";
    showVideoGreenCurtainBackgroundReplacement(filePath);
}
  
void Vide_GreenCurtain_Background_Replacement::showVideoGreenCurtainBackgroundReplacement(const char* filePath){background1 = imread("/Users/yangwei/Downloads/5bd38a8bd51c7f866b7a5b397b8c1807.jpeg");// 海底世界
    background2 = imread("/Users/yangwei/Downloads/3e6d749dfbec37b624c387767a04f34e.jpeg");//m78 星云
    VideoCapture videoCapture;
    videoCapture.open(filePath);
    if(!videoCapture.isOpened()){// 视频是否打开了
        qDebug()height:"height:"(row);// 原始帧图像的一列像素
        uchar *bgImage = background1.ptr(row);// 背景图像的一列像素
        uchar *maskImage = mask.ptr(row);// 遮罩的一列像素
        uchar *resultImage = result.ptr(row);// 最终输出结果的一列像素
        for(int col=0;col

到此这篇关于 OpenCV 实现视频绿幕背景替换功能的示例代码的文章就介绍到这了

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1349字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中