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

磐创AI
关注

下面是根据HSV图像准备的掩码,黄色区域中的所有像素的像素值为255,其余像素值为0:

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

现在,我们可以根据需要轻松地将绿色虚线框内的像素值设置为1,让我们回到代码中:

# HSV的范围lower = np.array([6,10,68])upper = np.array([30,36,122])

# 为图像创建核kernel = np.ones((3,3),np.uint8)

# 每次运行以下while循环时,执行下面的两行cap = cv2.VideoCapture(path+"Pexels Videos 2675513.mp4")cnt = 0

# 循环加载、预处理和显示帧while(True):    ret, f = cap.read()

# 提取我们将放置logo的区域    # 此区域的尺寸应与logo的尺寸相匹配    mini_frame = f[500:740,875:1070,:]

# 创建 HSV 图像    hsv = cv2.cvtColor(f, cv2.COLOR_BGR2HSV)

# 创建掩码    mask = cv2.inRange(hsv, lower, upper)

dil = cv2.dilate(mask,kernel,iterations = 5)

# 创建3个通道    mini_dil = np.zeros_like(mini_frame)    mini_dil[:,:,0] = dil[500:740,875:1070]    mini_dil[:,:,1] = dil[500:740,875:1070]    mini_dil[:,:,2] = dil[500:740,875:1070]

# 复制logo图像    logo_copy = logo.copy()

# 当掩码的像素值为0时,将像素值设置为1    logo_copy[mini_dil == 0] = 1

# 将标识的像素值设置为1,其中标识的像素值为0    logo_copy[logo == 0] = 1

# 当logo的像素值不为1时,将像素值设置为1    mini_frame[logo_copy != 1] = 1

# 合并图像(数组乘法)    mini_frame = mini_frame*logo_copy

# 在框架中插入logo    f[500:740,875:1070,:] = mini_frame

# 调整框架的大小(可选)    f = cv2.resize(f, (480, 270), interpolation = cv2.INTER_AREA)

# 显示帧    cv2.imshow('frame', f)

# 保存帧    # cv2.imwrite(path+'frames/'+str(cnt)+'.png',f)    cnt+= 1

if cv2.waitKey(20) & 0xFF == ord('q'):        cv2.destroyAllWindows()        break

上面的代码片段将从视频中加载帧,对其进行预处理,并创建HSV图像和掩码,最后将logo插入到视频中。你完成了!

结尾

在本文中,我们介绍了一个非常有趣的计算机视觉用例,并从零开始实现它。在此过程中,我们还学习了如何使用图像数组以及如何从这些数组中创建掩码。

当你处理其他的计算机视觉任务时,这会对你有所帮助。

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

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

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