1. 磐创AI-开放猫官方网站首页
  2. Medium

我如何在3个简单的步骤中用OpenCV替换视频上的绿屏背景

计算机视觉项目系列

学习计算机视觉时要做的一个很棒的项目是做一个绿屏,事实上这是我给我的学生做的第一个项目之一,顺便说一句,我还在等待一些学生来完成这个项目。

这是录制场景时使用的典型屏幕,其中背景完全是绿色的,因此稍后可以对其进行后处理,以更改背景并在其中放置任何内容。

当然,这也可以是实时的,比如当你在电视上看到天气预报时,你看到的地图是实时呈现的,呈现天气的人只是指着一堵绿色的墙。

要求

*Python 3

*OpenCV 4.5.2

*绿屏视频。您可以使用此选项:

*替换背景的图像。您可以使用此选项:

第一步:加载资源

首先,我们需要加载资源并从中获取一些基本信息。

使用VideoCapture实例打开视频

加载第一个框架并获取框架的大小(宽度x高度)

加载背景图像并将其大小调整为视频形状。

第二步:迭代框架并创建遮罩

接下来,我们将遍历视频的每一帧并处理这些帧。

所以第一件事是创建一个蒙版来区分背景和前景。

我们将使用一个简单的阈值来完成此操作,由于这将是一个“EUROUœ绿色屏幕”EURO�,因此我们知道背景将是绿色的。

所以有很多方法可以找到背景,一个非常简单的方法是分割BGR通道,使用绿色通道来应用阈值,并将其用作掩码。

def create_mask_with_threshold(frame):
# split the the B, G and R channels
b, g, r = cv2.split(frame)

# create the threshold
_, mask = cv2.threshold(g, 245, 255, cv2.THRESH_BINARY_INV)

# De-noise the threshold to get a cleaner mask
mask = cv2.erode(mask, cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9)))

return mask

热门人工智能文章:

另一个是色框,并考虑到颜色空间过滤使用cv2.inRange将像素取反,您将必须创建适当的颜色范围以使其取反,然后还需要使用cv2.bitwise_NOT将其求反。(=

def create_mask_with_in_range(frame):
mask = cv2.bitwise_not(cv2.inRange(frame, np.array([0, 200, 0]), np.array([0, 206, 0])))
mask = cv2.erode(mask, cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9)))

return mask

第三步:应用蒙版并合并图像

一旦我们有了蒙版,我们将需要应用它,并结合视频的帧与背景图像,以取代绿色背景与我们选择的背景图像。

这也可以通过不同的方式来实现。

漫漫长路

我过去遵循的漫长的、或许更全面的方法是:

  • 创建当前帧的掩码版本

  • 否定面具
  • 创建背景的遮罩版本

  • 合并两个蒙版图像


最终代码如下所示:

def replace_background(frame, bg, mask):
# if the pixel on threshold is background then make it white
frame[mask == 0] = 255

# if the pixel on threshold is not background then make it black
bg[mask != 0] = 255

# combine both images into frame
return cv2.bitwise_and(bg, frame)

捷径

最简单的方法是一行,只需将一幅图像中的像素替换到另一幅图像中即可。

代码为一行,如下所示:

def replace_background_pixels(frame, bg, mask):
frame[mask == 0] = bg[mask == 0]
return frame

让?EURO™%s连接

你可以在这里找到我的社交网络链接:https://linktr.ee/gnstudenkohttps://linktr.ee/gnstudenko

您想要访问最终代码吗?

联系我,留下一些掌声,我将很高兴与您共享完整的Github存储库。

你觉得这篇文章有用吗?

分享您的评论和经验!让我们知道哪些对您有效,哪些对您无效。

一定要给这个帖子一些掌声(30到50是个不错的数字!)如果你喜欢这篇文章并想看更多。

为了保持最新,请务必紧随其后,直到下一次!

别忘了给我们你的ğŸ‘�!

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/07/%e6%88%91%e5%a6%82%e4%bd%95%e5%9c%a83%e4%b8%aa%e7%ae%80%e5%8d%95%e7%9a%84%e6%ad%a5%e9%aa%a4%e4%b8%ad%e7%94%a8opencv%e6%9b%bf%e6%8d%a2%e8%a7%86%e9%a2%91%e4%b8%8a%e7%9a%84%e7%bb%bf%e5%b1%8f%e8%83%8c/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息