利用OpenCV抠图技术实现影视中“隐身”特效

点击我爱计算机视觉标星,更快获取CVML新技术


在电影电视制作的过程中,经常需要用到虚拟演播室,想想天气预报画面中经常会看到主持人前一会儿还置身于祖国*的炙热大街,一挥手就来到了辽阔无际的西北戈壁滩,这是怎么实现的呢?

实际上这都来自于计算机视觉技术:抠图后画面合成。

先来看一段哈利波特隐身的视频:

这样的特效我们在影视作品里看的多了,技术上如何实现呢?不会是后期请设计师ps吧?

使用计算机视觉里按照颜色抠图再合成就可以了,这个在英文里专业名字叫“Chroma Key”,不清楚这个过程为什么叫Key,可能它就像一个魔法键,按下去魔法就出来了吧^_^

前天LearnOpenCV博主发表了一篇博文,使用OpenCV实现上述隐身特效,让我们一起来看看吧。

主要原理

首先保存一幅场景图片,再使用特定颜色幕布遮盖身体,按照像素颜色替换成刚开始保存的场景图片中的像素。

当然,使用这种方法整个过程中摄像机不能移动!不然合成后身后的像素会看起来怪怪的。

请各位读者回头看看前面哈利波特的视频,披风刚拿出来的时候遮盖身体但此时并没有隐身,当他穿披风的时候,是把披风反过来穿的,因为披风另一面就是特定颜色的幕布。

可能很多朋友听过绿幕抠图,为什么我这里说是特定颜色的幕布?难道也有使用其他颜色的吗?

是的,使用什么颜色是按照场景来的,使用绿幕时场景中就不能摆放绿色的东西,如果要摆放带有绿叶的花草可能会使用红幕布,有时候也会使用蓝幕,跟场景内的物体颜色差异越大越好。

作者这里使用的是红色幕布。

算法步骤

步骤就比较简单了:

1.开始拍摄视频并保存背景图;

2.使用颜色检测算法检测红色幕布;

3.通过生成蒙版将红色幕布分割出来;

4.将红色幕布的像素位置填充背景图对应的位置的像素。

利用OpenCV抠图技术实现影视中“隐身”特效

利用OpenCV抠图技术实现影视中“隐身”特效

算法效果

一起来看看吧!

当然,跟电影里哈利波特的隐身特效还是有差距,但基本过程是有了。

如何改进

要想抠像效果好,必须要选择一种好的颜色模型,这决定了在度量红色和非红色的时候背景和前景的数值差异程度。

其实我们常用的RGB颜色空间模型在进行颜色距离度量时其并不优秀。

原博文作者使用了HSV颜色模型,但我觉得也不够好。CV君之前工作中做过相关工作,我推荐LAB颜色模型,或者YCrCb,应该会获得更好的效果。

当然这个问题很复杂,各种颜色空间模型中也有很多经验值,这很难说哪一种是最优秀的。也许读者可以发明专门用于抠像的颜色空间模型,也不一定^_^

原博文地址:

https://www.learnopencv.com/invisibility-cloak-using-color-detection-and-segmentation-with-opencv/

作者使用Python和C++两种语言实现。

开源代码地址:

https://github.com/spmallick/learnopencv/tree/master/InvisibilityCloak

加群交流

关注计算机视觉与机器学习技术,欢迎加入52CV群,扫码添加52CV君拉你入群,

请务必注明:52CV

利用OpenCV抠图技术实现影视中“隐身”特效

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:928997753。

(不会时时在线,如果没能及时通过验证还请见谅)

更多CV技术干货请浏览:

"我爱计算机视觉"干货集锦分类汇总(2019年1月20日)

喜欢CV君的分享,就请点个“好看”吧


利用OpenCV抠图技术实现影视中“隐身”特效

长按关注我爱计算机视觉