利用OpenCV抠图技术实现影视中“隐身”特效
点击我爱计算机视觉标星,更快获取CVML新技术
在电影电视制作的过程中,经常需要用到虚拟演播室,想想天气预报画面中经常会看到主持人前一会儿还置身于祖国南疆的炙热大街,一挥手就来到了辽阔无际的西北戈壁滩,这是怎么实现的呢?
实际上这都来自于计算机视觉技术:抠图后画面合成。
先来看一段哈利波特隐身的视频:
这样的特效我们在影视作品里看的多了,技术上如何实现呢?不会是后期请设计师ps吧?
使用计算机视觉里按照颜色抠图再合成就可以了,这个在英文里专业名字叫“Chroma Key”,不清楚这个过程为什么叫Key,可能它就像一个魔法键,按下去魔法就出来了吧^_^
前天LearnOpenCV博主发表了一篇博文,使用OpenCV实现上述隐身特效,让我们一起来看看吧。
主要原理
首先保存一幅场景图片,再使用特定颜色幕布遮盖身体,按照像素颜色替换成刚开始保存的场景图片中的像素。
当然,使用这种方法整个过程中摄像机不能移动!不然合成后身后的像素会看起来怪怪的。
请各位读者回头看看前面哈利波特的视频,披风刚拿出来的时候遮盖身体但此时并没有隐身,当他穿披风的时候,是把披风反过来穿的,因为披风另一面就是特定颜色的幕布。
可能很多朋友听过绿幕抠图,为什么我这里说是特定颜色的幕布?难道也有使用其他颜色的吗?
是的,使用什么颜色是按照场景来的,使用绿幕时场景中就不能摆放绿色的东西,如果要摆放带有绿叶的花草可能会使用红幕布,有时候也会使用蓝幕,跟场景内的物体颜色差异越大越好。
作者这里使用的是红色幕布。
算法步骤
步骤就比较简单了:
1.开始拍摄视频并保存背景图;
2.使用颜色检测算法检测红色幕布;
3.通过生成蒙版将红色幕布分割出来;
4.将红色幕布的像素位置填充背景图对应的位置的像素。
算法效果
一起来看看吧!
当然,跟电影里哈利波特的隐身特效还是有差距,但基本过程是有了。
如何改进
要想抠像效果好,必须要选择一种好的颜色模型,这决定了在度量红色和非红色的时候背景和前景的数值差异程度。
其实我们常用的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)
喜欢在QQ交流的童鞋,可以加52CV官方QQ群:928997753。
(不会时时在线,如果没能及时通过验证还请见谅)
更多CV技术干货请浏览:
喜欢CV君的分享,就请点个“好看”吧
长按关注我爱计算机视觉