概述
有了图片,有了josn文件,剩下来的就是和一堆路径和名字做斗争了。
主要是方便自己查看写了啥。有具体场景限制。见者勿扰。
后续补充了一个图片越界的bug。已修改
import cv2,os
import json
from tqdm import tqdm
videos_dir_path = 'manipulated_sequences/Deepfakes/c23/full_images/'
videos_full_paths = [videos_dir_path+i for i in os.listdir(videos_dir_path)]
josn_path = 'manipulated_sequences/Deepfakes/c23/bounding_boxes/'
print(videos_full_paths)
print(len(videos_full_paths))
for video in tqdm(videos_full_paths[112:113]):
video_name = video.split('/')[-1]#单个视频文件名字
single_josn = josn_path+video_name+'.json'#对应名字的josn
faces = json.load(open(single_josn,'r',encoding='utf-8'))#加载读取josn
keys = list(faces.keys())#josn的keys
images_paths = [video+'/'+i for i in os.listdir(video)]#视频的全部图片帧路径
os.makedirs('test/'+video_name+'/',exist_ok=True)#创建保存的地方
for image in range(0,len(images_paths),1):#间隔取图
image_name = images_paths[image].split('.')[0].split('/')[-1]#单个图片名字
if image_name in keys :#两个判断,主要是josn里有的没识别到
face_xywh = faces[image_name]#从josn里读取图片的四元素
if face_xywh is not None:#四元素不存在就跳过
img = cv2.imread(images_paths[image])#读取图片
ori_h ,ori_w = img.shape[0],img.shape[1]#高度,宽度
x, y, w, h = face_xywh#读取xywh
y1 = int(y-h*0.12) if int(y-h*0.12)>0 else 0#越界的问题
y2 = int(y + h*1.12) if int(y + h*1.12)<ori_h else ori_h
x1 = int(x-w*0.12) if int(x-w*0.12)>0 else 0
x2 = int(x + w * 1.12) if int(x + w * 1.12)<ori_w else ori_w
cropped_face = img[y1: y2, x1: x2]#先倍增,再切片
save_path = 'test/'+video_name+'/'+image_name+'.png'#保存的地方
cv2.imwrite(save_path,cropped_face)#保存
# print(video_name,'over!!')
最后
以上就是儒雅星星为你收集整理的根据人脸框坐标切脸的全部内容,希望文章能够帮你解决根据人脸框坐标切脸所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复