OpenCVForUnity学习教程——5

本文深入探讨绿幕抠像技术在计算机视觉中的应用,通过分析GreenScreenExample demo,讲解了如何利用OpenCV进行背景替换,包括absdiff函数计算帧间差、threshold函数实现二值化、bitwise_not进行图像取反等关键步骤。

Advanced(高级)篇

2.Green Screen Example

这个demo有点难啃,可能因为图形学基础太弱,但基础实现目标还是能看懂,就是将人物和背景分离,由于我的背景为白色,所以直接用demo计算出的效果与原目的不大一样,这里我们把第134行定义背景色mat数据的代码稍微改一下,在末尾加上“, new Scalar(255, 255, 255, 255)”。(参照137行的加法,这里的颜色可以根据个人摄像头中的背景色调整,否则他就默认背景为黑色了)

这样运行出来的效果就好多了。

接下来细看代码,依旧是简单看一下初始化函数,然后聚焦到update,先不管按键触发内容,然后看到了函数findFgMaskMat,定位进去,首先是absdiff函数,计算当前帧与背景之差的绝对值,参考:https://blog.youkuaiyun.com/zdyueguanyun/article/details/50853477

这里absdiff正着反着调用了两次再求和,尝试了一下只调用第一次,大体上效果差不多,但没有调用两次求和的效果好(虽然demo最终的效果也并不理想,但是不影响我们继续看代码学习)。

然后是threshold函数,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。参考:https://blog.youkuaiyun.com/u012566751/article/details/77046445

然后是转灰度图,再进行了两次二值化,区别是参数不一样,有关二值化参数,详细阅读:https://blog.youkuaiyun.com/lj501886285/article/details/52425157

具体这里为什么要三次二值化,还有三次参数不同是什么作用,就不大能理解了,后续再回头来看吧。(个人尝试了一下在仅absdiff一次的情况下,把第二次二值化去掉效果貌似更好点)

好,回到Update。

下一句是bitwise_not,是对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作。这里很好理解了,经过上面一系列操作,fgMaskMat,前景的mat已经算出来了,然后取非,就是背景的mat,再将绿色greenMat,用背景mat的数据遮罩到rgbaMat上,就完成了绿幕的效果。

最后一句就是赋值图像。


这里还用到了一个判断,按空格键了之后将rgbamat放到右上角显示,但是实测按了空格键后会有别的bug,-。-。这里就不细看了,回头再研究解决。

Works with Unity Cloud Build iOS & Android support Windows10 UWP support WebGL support Win & Mac & Linux Standalone support Preview support in the Editor OpenCV for Unity is an Assets Plugin for using OpenCV 3.4.2 from within Unity. Official Site | ExampleCode | Android Demo WebGL Demo | Tutorial & Demo Video | Forum | API Reference | Support Modules Features: - Since this package is a clone of OpenCV Java, you are able to use the same API as OpenCV Java 3.4.2 (link). - You can image processing in real-time by using the WebCamTexture capabilities of Unity. (real-time face detection works smoothly on iPhone 5) - Provides a method to interconversion of Unity's Texture2D and OpenCV's Mat. - IDisposable is implemented in many classes.You can manage the resources with the “using” statement. - Examples of integration with other publisher assets are available.(e.g. PlayMaker, NatCam, NatCorder) ExampleCode using OpenCV for Unity is available. MarkerBased AR Example MarkerLess AR Example FaceTracker Example FaceSwapper Example FaceMask Example RealTime FaceRecognition Example GoogleVR with OpenCV for Unity Example Kinect with OpenCV for Unity Example AVPro with OpenCV for Unity Example HoloLens with OpenCV for Unity Example PlayMakerActions for OpenCVforUnity NatCam with OpenCVForUnity Example NatCorder with OpenCVForUnity Example OpenCV for Unity uses OpenCV under 3-clause BSD License; see Third-Party Notices.txt file in package for details. System Requirements Build Win Standalone & Preview Editor : Windows 7 or later Build Mac Standalone & Preview Editor : OSX 10.9 or later
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值