我们生活在视频通话的时代。通过互联网,使用笔记本电脑或电脑自带的相机,我们把我们的生活广播给我们的同学、同事和家人。
但有时候,我们并不想广播我们自己的空间。我的办公室和其他许多办公室一样,常年杂乱无章。我身后的墙上还有一把吉他,这并不代表我很专业。
因此,Zoom和其他视频通话软件有一个隐藏背景的功能,通常把背景隐藏在你选择的图像后面。虽然大多数人不会考虑太多,但是确定由什么决定图像中前景和背景的实际任务并不容易。
前景检测
前景检测是计算机视觉领域最突出的应用之一。除了视频通话的例子,前景检测可以用于寻找和阅读图像中的文本,确定自动驾驶汽车中的障碍物,以及许多其他应用。
因此,许多复杂的方法被开发出来,以区分前景和背景。
OpenCV提供了几个“开箱即用”的解决方案;然而,在没有任何其他背景的情况下,这些都是黑盒,它们没有太多的学习机会。相反,我将使用一个定制的算法,它利用几个OpenCV模块来实现类似的结果。
OpenCV提供的“开箱即用”的解决方案:https://docs.opencv.org/master/d1/dc5/tutorial_background_subtraction.html
边缘检测和轮廓
我将演示的方法基于两个概念:边缘检测和轮廓。
边缘检测,顾名思义,就是试图在图像中找到对比线或边缘。这个关键的第一步是对图像进行预处理,以帮助区分任何物体。有几种边缘检测方法存在,其中,Canny方法是非常受欢迎的,并打包在OpenCV中。
Canny:https://en.wikipedia.org/wiki/Canny_edge_detector
一旦找到了边缘,寻找轮廓就变得更加容易和准确。在计算机视觉中,轮廓就是颜色或强度对比区域之间的连续边界线。不像边缘检测,寻找轮廓将在图像中发现突出的形状。
算法
如前所述,我将不会使用OpenCV中预先打包的背景移除器。相反,下面的流程图概括了我将使用的方法:
首先,我们将把图像转换成黑白。接下来,应用边缘检测,找到图像中的轮廓。对于前景来说,任何太大或太小的轮廓都将被移除。
其余的轮廓将被视为前景。这具有一定的直观意义&#