前几天,Anthony跟我聊,说他找到一个开源的库,可以做Chromakey,问我能不能用它来做点好玩的事情。我还是第一次听说Chromakey,抓紧查了查,懂了,不就是个虚拟演播室么。以前,参加各种新科技展会的时候曾玩过几次。大致是,你站在一个绿幕(有的也用蓝幕)前面,表演各种动作,后期进行图像处理时就可以把背景去掉,然后拼接到一个更煊的背景上,然后,你就可以在中央电视台直播,或者在夏威夷海滩上写代码了。
这种技术也多用在电影里,在绿幕前拍摄,后期处理时把背景去掉,就可以把人拼到任何煊酷的场景了。
当然,作为一个程序员,我只想写代码。
为了能优雅地在夏威夷海滩上写代码,我也是拼了。对着那个库的文档和代码看了半天,得出结论,太复杂,光编译就得依赖许许多多的库,而我们还要做跨平台,不大好弄。那个库叫OpenShot。
后来,又仔细研究了一下里面的算法,查了一些资料,发现,算法其实不难。无非就是有几个公式,逐一计算每个像素跟背景色的差异,如果跟背景差异少,则把背景做成透明的。只是,算法复杂度比较高,因为,一张1080p的图像,会有1920x1080个像素点。
得了,不管怎么样,挽起袖子自己做。在一个月黑风高的晚上,正赶上出差,在酒店昏暗的灯光下把代码写好了。
其实该技术需要一个主要的道具就是绿幕(或蓝幕,理论上任何单色的都可以,但红色跟人的肤色近,所以少用,一说欧美人的眼睛是蓝色的,所以多用绿幕),而我现场没有道具,就把代码发给Anthony,说你试试效果吧,结果,他团队所有人都试了。

昨天,著名FreeSWITCH网红Seven Du就在网上用FreeSWITCH搞起了直播,为FreeSWITCH精英群会员讲FreeSWITCH,为了演示这一神奇的技术,他还把Ken的图片当成了背景,虽然他连个绿幕都没有,灯光也不明亮,但整体效果还不错。

当然,后来,还为改进算法纠结了好几天,Anthony又加了些代码,把背景换成了视频,外国人真会玩。
Anthony还在家里开起了汽车
其实上面的视频有个Bug。你发现了吗?当然,这个Bug现在已经修好了,但你很有幸看到了一个带Bug的视频。
上面传的图片多是一些早期的图片和视频,所以,如果仔细观察,会发现画面的边缘还是有些拖泥带水。
我已经把这部分最新的代码写到了《FreeSWITCH源代码分析》里,感兴趣的话,买一本看看吧。
话说,还有不到一个月我们的FreeSWITCH培训班就开班了。好多人误以为FreeSWITCH只是用来打电话的,但其实,FreeSWITCH能做的事情很多很多,要不要来上海切磋切磋?