Opencv 入门学习之图片人脸识别

读入图片,算法检测,画出矩形框

import cv2
from PIL import Image,ImageDraw
import os 

def detectFaces(image_name):
    img = cv2.imread(image_name)
    face_cascade = cv2.CascadeClassifier(‘../opencv-2.4.9/data/haarcascades/haarcascade_frontalface_default.xml‘)
    if img.ndim==3: # 如果是三维就转换成二维
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    else:
        gray = img
    faces = face_cascade.detectMultiScale(gray,scaleFactor = 1.3,minNeighbors=4)
    result = []
    for (x,y,width,height) in faces:
        result.append((x,y,x+width,y+height))
    return result

def saveFaces(image_name):
    faces = detectFaces(image_name)
    if faces:
        save_dir = image_name.split(‘.‘)[0]+"_faces"
        os.mkdir(save_dir)
        count = 0
        for (x1,y1,x2,y2) in faces:
            file_name = os.path.join(save_dir,str(count)+".jpg")
            Image.open(image_name).crop((x1,y1,x2,y2)).save(file_name)
            count +=1

#在原图像上画矩形,框出所有人脸。
#调用Image模块的draw方法,Image.open获取图像句柄, ImageDraw获取该图像的draw实例,然后调用该draw实例的rectangle方法画矩形 (矩形的坐标即mZdetectFaces返回的坐标),outline是矩
形线条颜色(B,G,R)。
#注:原始图像如果是灰度图,则去掉outline,因为灰度图没有RGB可言。drawEyes、detectSmiles也一样

def drawFaces(image_name):
    faces = detectFaces(image_name)
    if faces:
        img = Image.open(image_name)
        draw_instance = ImageDraw.Draw(img)
        for(x1,y1,x2,y2) in faces:
            draw_instance.rectangle((x1,y1,x2,y2),outline=(25,255,0))
        img.save(‘drawFaces_‘+image_name)
        saveFaces(image_name)
        image = cv2.imread(‘drawFaces_‘+image_name)
        return image

if __name__=="__main__":
    img = drawFaces(‘obama.jpg‘)
    cv2.imshow("drawFaces",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
运行 python faceDetect.py 后效果如图:前2个识别错误!

生成人脸文件:

参考: http://blog.csdn.net/u012162613/article/details/43523507

时间: 2024-08-02 10:55:31

Opencv 入门学习之图片人脸识别的相关文章

用opencv做的静态图片人脸识别

这次给大家分享一个图像识别方面的小项目,主要功能是识别图像中的人脸并根据人脸在图片库找出同一个与它最相似的图片,也就是辨别不同的人. 环境:VS2013+opencv2.4.13 主要是算法:opencv中人脸识别算法(截取人脸)+哈希算法(辨别人脸) opencv中人脸识别算法:这个很常用,就是普通的人脸识别算法,直接上代码: void IdentifyFace(Mat image) //识别并截取人脸 { CascadeClassifier ccf; ccf.load(xmlPath); v

openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)

原理:使用GT人脸库做样本,VS2010下使用openCV2.44自带的Haar算法检測人脸区域,ASM Library特征检測,然后使用YCrCb颜色空间做肤色检測,再用LBP+Gabor小波提取特征,最小邻近距离做分类识别. 1.GT人脸库 Georgia Tech face database,网址:http://www.anefian.com/research/face_reco.htm GT人脸库包括50个人,每人15张不同角度.不同表情的正面照片. 图片为JPG格式,640*480,大

学习笔记TF058:人脸识别

人脸识别,基于人脸部特征信息识别身份的生物识别技术.摄像机.摄像头采集人脸图像或视频流,自动检测.跟踪图像中人脸,做脸部相关技术处理,人脸检测.人脸关键点检测.人脸验证等.<麻省理工科技评论>(MIT Technology Review),2017年全球十大突破性技术榜单,支付宝"刷脸支付"(Paying with Your Face)入围. 人脸识别优势,非强制性(采集方式不容易被察觉,被识别人脸图像可主动获取).非接触性(用户不需要与设备接触).并发性(可同时多人脸检测

Android静态图片人脸识别的完整demo(附完整源码)

Demo功能:利用android自带的人脸识别进行识别,标记出眼睛和人脸位置.点击按键后进行人脸识别,完毕后显示到imageview上. 第一部分:布局文件activity_main.xml [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co

利用openCV实现自动抓拍,人脸识别,清晰度的验证等

1.本文主要涉及到opencv的视频帧抓拍和验证的相关问题,不包含如何集成opencv 2.主要讲解涉及到opencv中的关键类及一些常用的方法 3.着重讲解代理方法: - (void)processImage:(cv::Mat &)image 4.集成过程中的注意事项 5.附上抓拍的小demo的下载地址 6.扩展,验证抓拍的图片中是否包含人脸 =====================================分割线====================================

C# 图片人脸识别

此程序基于 虹软人脸识别进行的开发 前提条件从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)将获取到的开发包导入到您的应用中 App_id与SDK_key是在初始化的时候需要使用基本类型所有基本类型在平台库中有定义. 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写.例如“long” 被定义成“MLong”数据结构与枚举 AFR_FSDK_FACEINPUT描述: 脸部信息定义typedef struct{MRE

OpenCV入门学习(一)图像放缩【简单的按比例放缩,无技术含量】

因为要读研,而且搞的是图像方向,老师说要搞图像方向matlab和openCV是最常用的,所以在读研之前希望把代码从c#和JAVA转到c++中,并且为以后深入的学习图像打好基础.言归正传~ 先利用这个小例子来简单的了解一下图像从读入内存,在内存中操作图像,在屏幕上显示,最终存到硬盘上的全部过程走一遍.本人喜欢把写出的程序变成方法,利用几个必要地参数来进行调用,可以防止以后代码越来越多,让自己看不懂. 1.首先介绍几个结构体 [1]IplImage:Intel Image Processing Li

OpenCV入门学习(三)HistogramEquivalent

直方图均衡 #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> /* 有的版本CV_BGR2GRAY宏定义没有,需要加载个legacy文件来获取,但是会与其他调用的宏定义出现冲突,所以 这里单独定义一个彩色图像到灰度图像的case number */ #define CV_BGR2GRAY 6 #inc

05 AppCan入门学习之图片轮播及其事件处理

Slider滑块使用 一.添加滑块 二.在js完成事件处理   函数 appcan.slider({参数}) selector:   /*选择器*/, hasIndicator:true or false  /*是否有位置提示条*/, hasLabel: true or false   /*是否有标签文字栏*/, aspectRatio:0 or !=0   /*是否控制纵横比,0为使用控件高度,>0使用纵横比*/, index:0 or >0   /*默认选择项*/ auto:2000