5 行 Python 代码实现一键视频抠像
最编程
2024-04-12 07:29:03
...
效果展示
首先展示一些抠图完毕的小片段,上一秒我还在家里的小房间,下一秒我就出现在了土耳其。
这是如何实现的?
2.1 导入所有相关模块
import cv2
import os
import numpy
as np
from PIL
import Image
import paddlehub
as hub
2.2 将视频内图像分离存储
def CutVideo2Image(video_path, img_path):
cap = cv2.VideoCapture(video_path)
index =
0
while(True):
ret,frame = cap.read()
if ret:
cv2.imwrite(img_path +
'%d.jpg' %
index, frame)
index +=
1
else:
break
cap.release()
print(
'Video cut finish, all %d frame' %
index)
该步骤将会把每一帧图像保存到本地目录。
2.3 导入模型进行人像抠图
def GetHumanSeg(frame_path, out_path):
# 加载模型
module = hub.Module(name=
"deeplabv3p_xception65_humanseg")
# 配置
test_img_path = [os.path.join(frame_path, fname)
for fname
in os.listdir(in_path)]
input_dict = {
"image": test_img_path}
results = module.segmentation(data=input_dict, output_dir=out_path)
# Tips:使用GPU加速需安装paddlepaddle-gpu
# results = module.segmentation(data=input_dict, use_gpu = gpu, batch_size = 10,output_dir=out_path)
该步骤将会把人像提取并保存为png至本地
2.4 生成绿幕并与人像合成
为什么要使用绿幕呢,主要是为了后续在视频后期软件里方便使用素材。当然熟悉Python的同学也可以直接使用一些Python模块进行视频后期。但是在这里还是推荐使用PR、AE这类专业软件,可以方便地对素材进行缩放、变速、位置处理、以及添加特效等操作。更重要的是,可以对素材进行调色,与新的背景更好地融合。
def init_canvas(width, height, color=(255, 255, 255)):
canvas = np.ones((height, width, 3), dtype="uint8")
canvas[:] = color
return canvas
# 生成绿幕
def GetGreenScreen(size, out_path):
canvas = init_canvas(size[0], size[1], color=(0, 255, 0))
cv2.imwrite(out_path, canvas)
def BlendImg(fore_image, base_image, output_path):
上一篇:
碰撞检测的经典解决方案
推荐阅读
-
5 行 Python 代码实现一键视频抠像
-
Python爬虫实现电影资源下载方法-本人python运行环境: IDE丨pycharm2.3 版本丨Python3.6 系统丨Windows 10 爬虫目的与思路:实现目的与思路: 目的: 实现对电影目标url的解析与下载,由于第三方vip解析,只提供在线观看,隐藏想实现对目标视频的下载。 思路: 1.在百度搜索全名解析得到解析网站:jx.618g.com?/url=[电影播放地址]。 2.首先拿到想要看的电影url,通过第三方vip视频解析网站进行解析。 3.通过抓包,模拟浏览器发送正常请求。 4.通过拿到缓存ts文件,下载视频ts文件。 5.最后通过转换为mp4文件,即可实现正常播放。主要代码: