这次学习主要是从http://blog.csdn.net/wangyaninglm/article/details/51731989这篇文章里学到的。
学习 opencv已经快4个月多了,看了很多关于图像处理的文章和书籍,但只是学会一些比较基础的关于图像基础操作,例如找出背景之类简单操作。
这次,挑战稍微实用的人脸识别。步骤较为简单,首先读出图片,然后将其转换为灰度图。加载官方的人脸识别库。
然后调用detectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30))函数,获取是被出来的人脸序列(实际是关于人脸坐标和大小的2x2矩阵序列);用矩形圈起来。
源代码如下:
#coding=utf-8
import numpy as np
import cv2
def faceRecognize(image):
# 检测出人脸的官方库加载
face_cas=cv2.CascadeClassifier('lbpcascade_frontalface.xml')
#读取图片
img=cv2.imread(image);
#获取图片灰度
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY);
# 识别输入图片中的人脸对象.返回对象的矩形尺寸
# 函数原型detectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30))
# gray需要识别的图片
# 1.03:表示每次图像尺寸减小的比例
# 5:表示每一个目标至少要被检测到4次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸)
# CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(30, 30)为目标的最小最大尺寸
# faces:表示检测到的人脸目标序列,将这张图片里面的所有人脸用矩形圈起来
faces = face_cas.detectMultiScale(gray, 1.03, 5)
for(x,y,w,h)in faces:
if w+h>200:
img2=cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,255),4);
cv2.imwrite("2.jpg",img);
if __name__ == "__main__":
faceRecognize("./1.jpg")
原图:
效果图如下: