开头
前几天看了 宅男福利!我用Python做了一个B站跳舞的小姐姐,满屏的美腿!.就试着做了一下,参考了很多网上的资料,写一下算是记录过程。
视频下载及处理
视频是 【欣小萌】Yes OK!想住进你的心里呀.
我下载了竖屏版
接下来处理视频
"""
@Author : xrd
@Email :
@Project : interest
"""
import cv2
from moviepy.editor import VideoFileClip
from xlwings import ret
import os
videoCrop = VideoFileClip(r"C:\python\bilibili\video\test.mp4").subclip(18, 33) #截15秒
videoCrop.write_videofile(r"C:\python\bilibili\video\subvideo.mp4")
cap = cv2.VideoCapture(r"C:\python\bilibili\video\subvideo.mp4")
num = 0
while 1:
ret, frame = cap.read()
if ret:
cv2.imwrite("imgs" + '%d.jpg' % num, frame)
num += 1
else:
break
cap.release()
最后生成450张图片
如果生成的图片数不同可能是视频帧率不同,后续可以自行修改。
截取的图片如下
人像分割转化为二值图
原文中是利用百度AI来人像分割转化为二值图,试着使用普通的分割方法
# 手动指定阈值的分割方法,自己设定阈值th_val
# 注意,此时,不指定自动方法
def threshold_manualset(img, th_val):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, th_val, 255, cv.THRESH_BINARY)
# (1)注意,下面的方法是反色的分割,黑白颠倒过来,可以试下
# ret, binary = cv.threshold(gray, th_val, 255, cv.THRESH_BINARY_INV)
# (2)注意,下面的方法是截断的阈值分割,小于th_val的都赋值th_val,可以试下
# ret, binary = cv.threshold(gray,th_val,255,cv.THRESH_TRUNC)
# (3)注意,下面的方法是截断清零的阈值分割,小于th_val的都赋值0,可以试下
# ret, binary = cv.threshold(gray,th_val,255,cv.THRESH_TOZERO)
# ret, binary = cv.threshold(gray,th_val,255,cv.THRESH_TOZERO_INV)
print("threshold_otsu %s" % ret)
return binary
但效果很不理想。
还是使用的百度AI作成 参考: 百度人像分割API调用——一键抠图<