前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NVIDIA VPI初探(3):2行代码轻松实现“视频背景抽离”

NVIDIA VPI初探(3):2行代码轻松实现“视频背景抽离”

作者头像
GPUS Lady
发布2021-10-13 15:02:14
6520
发布2021-10-13 15:02:14
举报
文章被收录于专栏:GPUS开发者GPUS开发者

前面文章已经简单介绍NVIDIA VPI视觉开发接口提供的几个常用图像处理算法 (NVIDIA VPI初探(2):只需2行代码轻松实现常见图像算法),将这些原本比较复杂的算法封装成单一指令,就能大大减轻开发者去微调细节的时间消耗。本文是进一步地用一个高斯混合模型的技术,将视频背景部分抽离出来的应用,

这份范例代码在14-background_subtractor项目中,请自行挑选一个“背景固定”的视频作为测试,现在先执行范例看看是什么效果:

代码语言:javascript
复制
 $ cd /opt/nvidia/vpi1/samples/02-stereo_disparity
 $ python3 main.py cuda ~/nvme120/data/video4test/C12.mp4

执行结果可以看这个视频:

可以发现右上方的背景图是“逐渐清晰”的,因为这个算法会去识别“移动物体”,然后逐帧记录比对之后,将移动物体抽离处理,只保留背景的部分,如果摄像头不固定,就没法将背景抽离,您可以尝试用手边自拍的小视频来做测试。

这个处理结果是很神奇!同样的,这个应用中的核心代码只有一行,就在main.py里的第78行(如下),这也是VPI的单指林算法的高阶封装接口。

代码语言:javascript
复制
br

接下来第93行与96行代码(如下)则是将原读入图像,分解出前景(fgmask)与背景图(bgimage),最后再将前景图想转换成BGR8格式,存到文件里面。

代码语言:javascript
复制
 fgmask, bgimage = bgsub(vpi.asimage(cvFrame, vpi.Format.BGR8), learnrate=0.01)
fgmask = fgmask.convert(vpi.Format.BGR8, backend=vpi.Backend.CUDA)

同样的,我们可以看到在视频读取与写入的部分,都是调用OpenCV的函数,再次印证前一篇文章所说的,VPI的目的是在补强“视觉算法”的部分,而不是在全面替代OpenCV的功能。

好了,这个系列的文章做完了,大家一起来试试NVIDIA VPI吧!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档