计算机视觉项目系列
学习计算机视觉时要做的一个很棒的项目是做一个绿屏,事实上这是我给我的学生做的第一个项目之一,顺便说一句,我还在等待一些学生来完成这个项目。
这是录制场景时使用的典型屏幕,其中背景完全是绿色的,因此稍后可以对其进行后处理,以更改背景并在其中放置任何内容。
当然,这也可以是实时的,比如当你在电视上看到天气预报时,你看到的地图是实时呈现的,呈现天气的人只是指着一堵绿色的墙。
要求
*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/