在初步学习了数字图像处理的相关知识并在Matlab进行了初步的模拟后,我将学习的中重点转向了Python环境下的OpenCV库的学习,以此博客记录一下学习的进程,本文章代码主要参考OpenCV库源代码、刘波译的《OpenCV3计算机视觉Pythond实现》中第五章的主要内容。
目录
一、静态人脸识别
一、加载Haar相关文件
二、静态人脸识别
三、代码分析
我们可以使用OpenCV自带的源代码副本实现静态下的人脸识别,使用命令符 windows+R输入cmd打开操作命令符,输入pip show opencv-python找到opencv的相应位置,将文件夹date中的harrcascades的全部xml文件复制进项目的子文件中。
粗略阅读文件名可知该xml文件主要应用的识别范围,本文章主要应用frontface_default和eye进行后续操作。
在pycharm中项目文件下创建脚本,实现静态下的人脸检测,此时我已将待检测图片OIP-C放在项目文件下。
import cv2
filename = 'OIP-C.jpg'
pathface = 'B:\\Python\Practic\Face recogntion\cascades\haarcascade_frontalface_default.xml'
def detect( filename ):
face_cascade = cv2.CascadeClassifier( pathface )
img = cv2.imread( filename )
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img, (x,y) , (x+w,y+h) , (255,0,0) , 2)
cv2.namedWindow('Face recogntion')
cv2.imshow('Face recongtion', img)
cv2.imwrite('./Try.jpg', img)
cv2.waitKey(0)
detect(filename)
注:在测试过程中,若不指定xml文件的具体路径有可能导致出错
filename = 'OIP-C.jpg'
pathface = 'B:\\Python\Practic\Face recogntion\cascades\haarcascade_frontalface_default.xml'
在import cv2后进行的预准备代码,指定图片和所用对象的路径。
def detect( filename ):
face_cascade = cv2.CascadeClassifier( pathface )
img = cv2.imread( filename )
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img, (x,y) , (x+w,y+h) , (255,0,0) , 2)
cv2.namedWindow('Face recogntion')
cv2.imshow('Face recongtion', img)
cv2.imwrite('./Try.jpg', img)
cv2.waitKey(0)
定义识别函数,新建对象face_cascade,后续将用此对象调用函数完成图像识别,读入图像,将其转为灰度图像,使用face_cascade.detectMultiScale(gray, 1.3, 5)方法对图像进行识别,其中1.3为每次迭代时图像的压缩率,5为每个人脸矩阵保留临近数目的最小值,
for (x,y,w,h) in faces:
img = cv2.rectangle(img, (x,y) , (x+w,y+h) , (255,0,0) , 2)
用该函数访问识别后的数组,使用rectang方法对其进行框选,(255,0,0)表示BGR中的B通道开启,其余两通道关闭,2为线的大小。