#计算机视频处理 使用ffmpeg

【对视频中的人物进行模糊处理】

步骤

  • 先将视频进行分帧处理
  • 将视频分帧后的图片进行依次识别,模糊化处理
  • 将新的图片合成为新的视频
import os
from numpy import *
import cv2
import face_recognition
import sys
from PIL import Image, ImageFilter
from scipy.ndimage import filters
import matplotlib.pyplot as plt

def videomosaic(v_path):
    #视频分帧
    cap=cv2.VideoCapture(v_path)
    frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)

    #对每帧图片进行处理
    for i in range(int(frame_count)):
        #读取每张图片中的人脸信息
        _,img = cap.read()
        face_locations=face_recognition.face_locations(img)
        #print(face_locations)
        #注意!face_location(top,right,bottom,left)
        face_num=len(face_locations)

        #现在的图片是array格式,需要转成PIL Image格式后才能用PIL操作
        pil=Image.fromarray(img.astype('uint8')).convert('RGB')
        
        #对每张人脸进行高斯模糊
        for j in range(0,face_num):  
            #注意!crop(left,upper,right,lower)与face_locaion的默认参数不同,所以在写box时要调换顺序
            box=(face_locations[j][3],face_locations[j][0],face_locations[j][1],face_locations[j][2])
            #print(box)

            #将裁剪下来的图片高斯模糊后粘回
            region=pil.crop(box)
            #print(type(region))
            region1=region.filter(ImageFilter.GaussianBlur(radius=15))
            #print(type(region1))
            #region1=Image.fromarray(region1.astype('uint8')).convert('RGB')
            #print(type(region1))
           
            pil.paste(region1,box)
           # plt.imshow(pil)
            #plt.title("bear")
            #plt.axis('off')
            #plt.show()

        #再把pil转回array格式之后用cv2存储新文件
        pil=array(pil)
        cv2.imwrite('./piccc/image{}.jpg'.format(i),pil)
        face_locations.clear()
    

os.chdir(r'C:\Users\81244\Desktop\Python practice')
os.mkdir('./piccc')

path='ghz.mp4'
#image_save=r'C:\Users\81244\Desktop\Python practice\piccc'
videomosaic(path)

延伸想法:视频中的人脸贴上卡通图片

 #将裁剪下来的图片高斯模糊后粘回
            region=pil.crop(box)
            #print(type(region))
            region1=region.filter(ImageFilter.GaussianBlur(radius=15))
            #print(type(region1))
            #region1=Image.fromarray(region1.astype('uint8')).convert('RGB')
            #print(type(region1))
           
            pil.paste(region1,box)

将该步骤中的图片剪切粘贴换成卡通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值