共计 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 实现视频绿幕背景替换功能的示例代码的文章就介绍到这了
正文完
星哥玩云-微信公众号