使用Python+OpenCV实现在视频中某对象后添加图像

磐创AI
关注

为我们的计算机视觉项目制定实现计划

在实施这个项目之前,我们先了解一下一个计算机视觉技术:图像掩码。让我给你看一些插图来了解这项技术。

假设我们要在图像(图2)中放置一个矩形(图1),使第二个图像中的圆出现在矩形的顶部:

使用Python+OpenCV实现在视频中某对象后添加图像

所以,期望的结果应该是这样的:

使用Python+OpenCV实现在视频中某对象后添加图像

然而,这并不是那么简单的。当我们从图1中选取矩形并将其插入图2中时,它将出现在粉色圆圈的顶部:

使用Python+OpenCV实现在视频中某对象后添加图像

这不是我们想要的,圆圈应该在矩形的前面。所以让我们了解如何解决这个问题。

这些图像本质上是数组,这些数组的值是像素值,每种颜色都有自己的像素值。

因此,我们可以将矩形的像素值设置为1,在这里它应该与圆重叠(在图5中),同时保持矩形的其余像素值不变。

在图6中,蓝色虚线包围的区域是我们放置矩形的区域,让我们用R来表示这个区域。我们也将R的所有像素值设置为1,但是我们将保持整个粉色圆圈的像素值不变:

使用Python+OpenCV实现在视频中某对象后添加图像

我们的下一步是将矩形的像素值与R的像素值相乘,因为任何数字乘以1都会得到该数字本身,所以所有R的像素值都将被矩形的像素替换。

类似地,矩形的像素值1将被图6的像素替换,最终的结果是这样的:

使用Python+OpenCV实现在视频中某对象后添加图像

这是我们将要使用的技术,将OpenCV标志嵌入到视频中的背后原理。

在Python中实现这项技术

你可以使用Jupyter笔记本或任何你选择的IDE,然后我们首先导入必要的库。

导入库

import cv2import reimport osimport randomimport numpy as npimport matplotlib.pyplot as pltfrom os.path import isfile, join

注意:本教程使用的OpenCV库版本是4.0.0。

加载图像

接下来,我们将指定保存logo和视频的工作目录路径。请注意,你应该在下面的代码片段中指定“path”:

# 指定工作目录的路径path = ".../"

# 读取logo图像logo = cv2.imread(path+"opencv_logo.png")

# 读取视频的第一帧cap = cv2.VideoCapture(path+"Pexels Videos 2675513.mp4")ret, frame = cap.read()

至此我们已经加载了logo图像和视频的第一帧。现在让我们看看这些图像或数组的形状:

logo.shape, frame.shape

输出:((240, 195, 3), (1080, 1920, 3))

两个输出都是三维的。第一个维度是图像的高度,第二个维度是图像的宽度,第三个维度是图像中的通道数,即蓝色、绿色和红色。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存