OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
3.代码实现
import cv2
import dlib
import os
import sys
import random
# 存储位置
output_dir ='D:/Myworkspace/JupyterNotebook/People/person/person2'
size =64ifnot os.path.exists(output_dir):
os.makedirs(output_dir)# 改变图片的亮度与对比度defrelight(img, light=1, bias=0):
w = img.shape[1]
h = img.shape[0]#image = []for i inrange(0,w):for j inrange(0,h):for c inrange(3):
tmp =int(img[j,i,c]*light + bias)if tmp >255:
tmp =255elif tmp <0:
tmp =0
img[j,i,c]= tmp
return img
#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()# 打开摄像头 参数为输入流,可以为摄像头或视频文件
camera = cv2.VideoCapture(0)
index =1whileTrue:if(index <=20):#存储15张人脸特征图像print('Being processed picture %s'% index)# 从摄像头读取照片
success, img = camera.read()# 转为灰度图片
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用detector进行人脸检测
dets = detector(gray_img,1)for i, d inenumerate(dets):
x1 = d.top()if d.top()>0else0
y1 = d.bottom()if d.bottom()>0else0
x2 = d.left()if d.left()>0else0
y2 = d.right()if d.right()>0else0
face = img[x1:y1,x2:y2]# 调整图片的对比度与亮度, 对比度与亮度值都取随机数,这样能增加样本的多样性
face = relight(face, random.uniform(0.5,1.5), random.randint(-50,50))
face = cv2.resize(face,(size,size))
cv2.imshow('image', face)
cv2.imwrite(output_dir+'/'+str(index)+'.jpg', face)
index +=1
key = cv2.waitKey(30)&0xffif key ==27:breakelse:print('Finished!')# 释放摄像头 release camera
camera.release()# 删除建立的窗口 delete all the windows
cv2.destroyAllWindows()break