使用ffmpeg或Python从视频中删除随机背景

问题描述 投票:0回答:1

我想使用ffmpegPython从一个人的视频中删除背景。如果我在任何地方录制视频,请检测视频中的人物,然后删除除此人之外的任何内容。不要求绿色或单色背景,因为可以通过chromakey完成,我不是在寻找。

我试过这个(https://tryolabs.com/blog/2018/04/17/announcing-luminoth-0-1/)方法,但它给了我矩形框的输出。它足够的信息,因为探索的区域足够狭窄,但仍需要删除总背景。我也尝试过grabcuthttps://docs.opencv.org/4.1.0/d8/d83/tutorial_py_grabcut.html),但需要用户互动,否则结果不太好。我也尝试使用ffmpeg并发现这个例子(http://oioiiooixiii.blogspot.com/2016/09/ffmpeg-extract-foreground-moving.html),但它需要静止图像,所以我尝试拍摄背景图片,然后用一个人录制视频,但是需要很多东西来区分背景图像和视频帧。

对于opencv方法,我试过这个。

img = cv.imread('pic.png')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (39, 355, 1977, 2638)
cv.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0), 0, 1).astype('uint8')
img = img*mask2[:, :, np.newaxis]
plt.imshow(img), plt.colorbar(), plt.show()

但它也正在消除一些人的角色。也试过ffmpeg方式,但不是一个好结果。

ffmpeg -report -y -i "img.jpg" -i "vid.mov" -filter_complex "[1:v]format=yuva444p,lut=c3=128[video2withAlpha],[0:v][video2withAlpha]blend=all_mode=difference[out]" -map "[out]" "output.mp4"

我所需要的只是一个人的图像/视频拍摄在任何正常背景下,没有用户交互,如区域选择或任何其他类似的东西。 Luminoth已经训练了数据,但是给了一盒人不是确切的人,所以我可以删除。任何帮助或指导删除背景将不胜感激。

python opencv machine-learning ffmpeg computer-vision
1个回答
1
投票

您可以尝试基于深度学习的方法。这是一个示例回购:

https://github.com/TianzhongSong/Person-Segmentation-Keras

这将为您在任意背景上的人提供面具。只需使用opencv加载图像并将它们放入网络即可。

© www.soinside.com 2019 - 2024. All rights reserved.