原文链接: opencv 动漫头像截取
下一篇: jetbrains 学生版申请
git
https://github.com/nagadomi/lbpcascade_animeface
使用opencv截取动漫头像,并保存
op画风。。。。。。
炮姐就好很多了
保存文件名简单使用自增数字
代码中使用np读取中文字符路径,由于有的图片损坏无法读取,也加了异常捕获,防止代码运行中退出,最后保存到指定目录中
img = cv.imdecode(np.fromfile(path, dtype=np.uint8), -1)
效果还行。。。。。。。500多张图片提取了近1000张人脸数据
import cv2 as cv
import numpy as np
import os
face_cnt = 0
def detect(path, out_dir, face_size=128):
global face_cnt
# 解决opencv 读取中文路径时出错
img = cv.imdecode(np.fromfile(path, dtype=np.uint8), -1)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detector = cv.CascadeClassifier("lbpcascade_animeface.xml")
faces = face_detector.detectMultiScale(gray, 1.05, 5)
print(path, len(faces))
for i, rect in enumerate(faces):
x, y, w, h = rect
face = img[y:y + h, x:x + w]
face = cv.resize(face, (face_size, face_size))
out_path = f"{out_dir}/{face_cnt}.jpg"
face_cnt += 1
print(out_path)
cv.imwrite(out_path, face)
def save_all():
img_dir = 'C:/Users/Ace/Pictures/炮姐'
out_dir = 'd:/data/faces'
img_paths = []
for src_name, dir_names, file_names in os.walk(img_dir):
# print(file_name)
img_paths += [os.path.join(src_name, i) for i in file_names]
print(len(img_paths))
for path in img_paths:
try:
detect(path, out_dir)
except Exception as e:
print(path, e)
save_all()