首页 > 解决方案 > 在python中将png图像与带有alpha通道的视频结合起来

问题描述

我的意图是: - 从视频中提取所有帧 - 对每个帧应用背景去除 - 将所有帧合并为具有透明度的视频

问题: - 生成的视频没有所需的透明度,其中背景曾经是我的合并部分代码

import cv2
import os

image_folder = r"C:\Users\youre\Documents\machine_learning\bg-rm\output"
video_name = r'C:\Users\youre\Documents\machine_learning\bg-rm\test.avi'
images =  # list of all frames
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc(*"MJPG"), 30, (width, height))
for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()

我的问题: - 我必须做什么才能使结果视频中的背景透明,因为我的代码只是给了我一个黑色背景。更具体:如何将 png 帧与 alpha 通道合并在一起?

标签: pythonopencvvideocv2

解决方案


MJPG视频格式不支持 Alpha 通道。这只是一个JPEG图像序列,JPEG格式不支持透明度。您应该选择支持它的编解码器。但我不确定是否可以通过 OpenCV 获得,这取决于您的平台。

相反,您可以将每个图像保存为 PNG(带有 alpha 通道)并将它们与第三方工具(如 FFMPEG)合并。HAP 是我所知道的唯一支持 alpha 通道的免费和开源视频格式,但我并不了解所有这些格式。


推荐阅读