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

Crq
Crq
管理员
1418
文章
0
粉丝
Linux教程评论3字数 347阅读1分9秒阅读模式
摘要这篇文章主要介绍了如何利用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实现视频绿幕背景替换功能的示例代码的文章就介绍到这了

weinxin
我的微信
微信号已复制
我的微信
这是我的微信扫一扫
 
Crq
  • 本文由 Crq 发表于2025年1月16日 06:08:00
  • 转载请注明:https://www.cncrq.com/12626.html
cp 快捷命令:复制文件到多个目录 Linux教程

cp 快捷命令:复制文件到多个目录

在学习 Linux 的过程中,对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而,如果你想要成为一个老手,学习我说的“快捷命令”会...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证